首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Commons ()和getOptionValue()

Commons ()和getOptionValue()
EN

Stack Overflow用户
提问于 2016-11-16 19:22:43
回答 1查看 2.4K关注 0票数 0

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

getValue()

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

getOptionValue(字符串)

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

如您所见,getOptionValue(String)显式地表示参数,而另一个参数只表示值,但它们的方法名称中都有“值”。由于没有setValue(String)方法或诸如此类的东西,我只是假设它和参数是一样的。

代码语言:javascript
复制
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

arg

EN

回答 1

Stack Overflow用户

发布于 2016-11-18 05:57:00

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

代码语言:javascript
复制
option = (Option) option.clone();

它具体地切断了您传入的选项与内部选项对象之间的联系,代码似乎不想以任何方式更改它所给出的对象。

因此,检索值的唯一方法是通过CommandLine类。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40640586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档