如何在varargs中测试arg

时间:2014-11-22 22:16:05

标签: java

我有一个接受varargs的方法:

public static void main(String... args) throws Exception {

我正在尝试根据是否传递参数来设置变量的值。在这种情况下,我想知道是否已经传递了第8个参数,如果是,则将变量的值设置为该参数的值,否则使用空字符串。我不能在布尔值真实结果部分的args [8]中进行硬编码,因为当它只用7个参数运行时会导致编译错误。所以我尝试了以下但是它也出错:

String titlePrefix = ((args.length!=8) ?  "" : args[args.length]);

在这种情况下测试参数是否正确的正确方法是什么?只有在传递了它之后才使用它的值?我知道如果这种方法超过8个参数,上面的问题会给我带来问题,但是现在,让我们假设它永远不会超过8个。

提前谢谢。

3 个答案:

答案 0 :(得分:1)

args [args.length]应为args [args.length -1]

答案 1 :(得分:1)

String titlePrefix = ((args == null || args.length<8) ?  "" : args[7]);

为什么?

首先,您将来可能需要第9个或第10个参数。有9个参数意味着第8个参数存在,所以你应该测试你是否有至少 8个参数,而不是你是否有完全 8个参数。

其次,出于同样的原因,你不应该分配最后一个参数,而是确切的第8个参数。毕竟,最后一个论点可能是第9或第10或第100个。

但即使您正在测试最后一个参数,请记住Java中的数组(和varargs只是一个伪装的数组)从索引0开始到索引length-1。第一个参数是args[0],第二个参数是args[1],第八个参数是args[7]。因此,要测试最后一个参数,您必须使用args[args.length-1]

在处理varargs时,通常最好先测试null(尽管当我们讨论main方法时,它可能不会发生)。

答案 2 :(得分:1)

检查一下。我认为这正是你所寻找的。

public class Test001 {

    public static void main(String... args) throws Exception {
        for (int i=0; i<8; i++){
            String val = args.length <= i ? "" : args[i];
            System.out.println("arg[" + i + "] = [" + val + "].");
        }
    }

}