我对这两种方法有点困惑。当我使用getOptionValue(optionName)时,我确实得到了我在命令行中输入的参数,但是当我使用optionName.getValue()时得到null
getValue()
返回此选项的指定值,如果没有值,则返回null。
getOptionValue(字符串)
检索此选项的第一个参数(如果有的话)。
如您所见,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
arg
空
发布于 2016-11-18 05:57:00
我不知道为什么,但这似乎是故意的。在方法DefaultParser中的类handleOption()中,在601行中,代码可以:
option = (Option) option.clone();它具体地切断了您传入的选项与内部选项对象之间的联系,代码似乎不想以任何方式更改它所给出的对象。
因此,检索值的唯一方法是通过CommandLine类。
https://stackoverflow.com/questions/40640586
复制相似问题