0

我对这两种方法有点困惑。当我使用时,getOptionValue(optionName)我确实得到了我在命令行中输入的参数,但是当我使用时我得到了 nulloptionName.getValue()

获取值()

返回此 Option 的指定值,如果没有值,则返回 null。

获取选项值(字符串)

检索此选项的第一个参数(如果有)。

正如您所看到getOptionValue(String)的,明确表示参数,而另一个只表示值,但它们的方法名称中都有“值”。由于没有setValue(String)方法或类似的东西,我只是假设它与参数相同。

public static void main(final String[] args ) {
    CommandLine cmd = null;
    Option program = Option.builder("p")
             .hasArg()
             .required(true)
             .longOpt("program")
             .build();

    Options options = new Options();
    options.addOption( program );

    CommandLineParser parser = new DefaultParser();
    try {
        cmd = parser.parse( options, args );
    }
    catch( ParseException exp ) {
        System.err.println( "Parsing failed.  Reason: " + exp.getMessage() );
    }

    String[] list;
    list = cmd.getArgs();

    int argsN = program.getArgs();
    String optionValue = cmd.getOptionValue("p");
    String value = program.getValue();

    System.out.println(argsN);
    System.out.println(optionValue);
    System.out.println(value);

}

输出是:

1

[参数]

无效的

4

1 回答 1

0

我不知道为什么,但目前这似乎是故意的。在方法中的类DefaultParser中,代码执行以下操作:handleOption()601

option = (Option) option.clone();

这特别切断了您传入的选项和内部选项对象之间的联系,似乎代码不想以任何方式更改它给出的对象。

所以检索值的唯一方法是通过CommandLine类。

于 2016-11-18T05:57:00.603 回答