繁体   English   中英

如何在varargs中测试arg

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM