我有一个接受varargs的方法:
public static void main(String... args) throws Exception {
我正在尝试根据是否传递参数来设置变量的值。在这种情况下,我想知道是否已经传递了第8个参数,如果是,则将变量的值设置为该参数的值,否则使用空字符串。我不能在布尔值真实结果部分的args [8]中进行硬编码,因为当它只用7个参数运行时会导致编译错误。所以我尝试了以下但是它也出错:
String titlePrefix = ((args.length!=8) ? "" : args[args.length]);
在这种情况下测试参数是否正确的正确方法是什么?只有在传递了它之后才使用它的值?我知道如果这种方法超过8个参数,上面的问题会给我带来问题,但是现在,让我们假设它永远不会超过8个。
提前谢谢。
答案 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)
检查一下。我认为这正是你所寻找的。 p>
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 + "].");
}
}
}