我不太了解LongOpt中第三个构造函数的用途。 overview描述如下:
如果LongOpt对象中代表long选项的标志字段为非null,则将整数值字段存储在其中,并将整数0返回给调用方。
以上示例的摘录可以指导我以下的观察/问题:
LongOpt[] longopts = new LongOpt[3];
//
StringBuffer sb = new StringBuffer();
longopts[0] = new LongOpt("help", LongOpt.NO_ARGUMENT, null, 'h');
longopts[1] = new LongOpt("outputdir", LongOpt.REQUIRED_ARGUMENT, sb, 'o');
longopts[2] = new LongOpt("maximum", LongOpt.OPTIONAL_ARGUMENT, null, 2);
// ...
// See overview link above for full example
// ..
while ((c = g.getopt()) != -1)
switch (c)
case 0:
arg = g.getOptarg();
System.out.println("Got long option with value '" +
(char)(new Integer(sb.toString())).intValue()
+ "' with argument " +
((arg != null) ? arg : "null"));
break;
// ... Rest of example
因此,当遍历所有选项时,您将获得0。当然,这并不能告诉您我们选择了哪个选项,因此我们将长选项o
的“短格式”放在{{ 1}}到StringBuilder对象--outputdir
中。从该StringBuilder选项中提取char可以使您看到它是哪个长选项,并知道如何使用该选项的参数。
一些问题:
sb
?outputdir
。这是因为无法打开String时该库是在JDK 7之前编写的吗?然后,长选项可以像短选项一样进行匹配。答案 0 :(得分:0)
经过研究,我可以澄清自己的问题
我的理解是否正确?
我认为它是基于实验的。但是对于以后阅读此书的任何人都可以进行更正。
为什么要使用存储字符的StringBuilder?为什么不只拥有一个常规字符串,并在其中输入完整的长选项名称,即outputdir?
为什么长语句字符串上的switch语句不匹配?即输出目录。这是因为无法打开String时该库是在JDK 7之前编写的吗?然后,长选项可以像短选项一样进行匹配。
是的,我可以找到的唯一回购的最后一次提交是8 years ago。因此,需要将匹配的选项提取到单个char
中,以便在switch语句中使用。
我改用Apache Commons CLI了,它的API更简单