在Java中从命令行传递多个参数

时间:2013-02-10 05:54:25

标签: java if-statement parameters

我正在开发一个项目,我需要从命令行传递多个参数 -

以下是我的用例 -

  1. 从命令行开始,我将至少传递四个参数 - noOfThreadsnoOfTasksstartRangetableName1,所以如果我通过这四个参数然后我需要将它们存储在变量和任何表名中 - 我需要将它添加到字符串列表中,以便我可以在其他代码中使用它们。

  2. 其次,我可以传递五个参数,而不是像上面那样传递四个参数 - 所以五个参数可以是 - noOfThreadsnoOfTasksstartRangetableName1tableName2。所以这里tableName2是额外的。所以,如果我传递这五件事,那么我需要将它们存储在变量中,这里我将tableName1tableName2作为两个表传递,因此我将这两个表存储在一个字符串列表中。

  3. 第三,我可以传递六个参数而不是上面的五个 - 所以六个参数可以是 - noOfThreadsnoOfTasksstartRangetableName1,{ {1}}和tableName2。所以这里tableName3是额外的。所以如果我传递这六个东西,那么我需要将它们存储在一个变量中,在这里我将tableName3tableName1tableName2作为三个表传递,所以我将存储这三个字符串列表中的表格。

  4. 所以对于上面的场景,我有以下代码。它目前看起来非常难看,因为我的代码中有很多重复,如下所述。有什么方法可以让它更清洁吗?

    以下是我的代码 -

    tableName3

2 个答案:

答案 0 :(得分:2)

您有一个很多的冗余,并且当您看到使用方法进行简化时思考重构。这实际上就是我要做的事情。另外,考虑为tableNames String[] tableNames设置String []字段,这样您就可以在知道参数计数后将其声明为所需大小的数组。例如:

public void fillParams(String[] args) {
    if (args.length < someMinimum) {
       // throw some exception
    }
    noOfThreads = Integer.parseInt(args[0]);
    noOfTasks = Integer.parseInt(args[1]);
    startRange = Integer.parseInt(args[2]);

    tableNames = new String[args.length - 3];
    for (int i = 0; i < tableNames.length; i++) {
       tableNames[i] = args[i + 3];
       databaseNames.add(tableNames[i]);
    }
}

答案 1 :(得分:0)

我建议删除tableName1 - tableName3,它们是多余的,你总是可以得到一个表名为

tablename1 =  databaseNames.get(0);

这是我的版本:

public static void main(String[] args) {
    if (args.length < 4) {
        System.err.println("Usage: ....");
        System.exit(1);
    }
    noOfThreads = Integer.parseInt(args[0]);
    noOfTasks = Integer.parseInt(args[1]);
    startRange = Integer.parseInt(args[2]);
    for(int i = 3; i < args.length; i++) {
        databaseNames.add(args[i]);
    }
}