[英]How to test arg in varargs
我有一个接受varargs的方法:
public static void main(String... args) throws Exception {
我试图根据是否传递参数来设置变量的值。 在这种情况下,我想知道是否已经传递了第8个参数,如果是,则将变量的值设置为该参数的值,否则使用空字符串。 我不能在布尔值真实结果部分的args [8]中进行硬编码,因为当它只用7个参数运行时会导致编译错误。 所以我尝试了以下但它也错了:
String titlePrefix = ((args.length!=8) ? "" : args[args.length]);
在这种情况下测试参数是否正确的正确方法是什么,只有在传递了它之后才使用它的值? 我知道如果这种方法超过8个参数,上面的内容会给我带来问题,但是现在,让我们假设它永远不会超过8个。
先感谢您。
args [args.length]应为args [args.length -1]
String titlePrefix = ((args == null || args.length<8) ? "" : args[7]);
为什么?
首先,您将来可能需要第9或第10个参数。 有9个参数意味着第八参数存在,所以你应该测试你是否有至少 8个参数,你不是是否有完全相同的参数8。
其次,出于同样的原因,你不应该分配最后一个参数,而是确切的第8个参数。 毕竟,最后一个论点可能是第9或第10或第100。
但即使您正在测试最后一个参数,请记住Java中的数组(和varargs只是一个伪装的数组)从索引0开始到索引length-1
。 第一个参数是args[0]
,第二个args[1]
是args[1]
,第八个args[7]
是args[7]
。 因此,要测试最后一个参数,必须使用args[args.length-1]
。
在处理varargs时,通常最好先测试null(尽管当我们讨论main
方法时,它可能不会发生)。
检查一下。 我认为这正是你要找的。
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 + "].");
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.