javagnugetopt:理解LongOpt';字符串缓冲标志
我不太明白中第三个构造函数的用途。报告对其进行了如下描述: 如果表示long选项的LongOpt对象中的flag字段为非null,则整型值字段存储在那里,并向调用者返回一个整数0 摘自上述示例,以指导我的以下观察/问题:javagnugetopt:理解LongOpt';字符串缓冲标志,java,getopt,Java,Getopt,我不太明白中第三个构造函数的用途。报告对其进行了如下描述: 如果表示long选项的LongOpt对象中的flag字段为非null,则整型值字段存储在那里,并向调用者返回一个整数0 摘自上述示例,以指导我的以下观察/问题: LongOpt[] longopts = new LongOpt[3]; // StringBuffer sb = new StringBuffer(); longopts[0] = new LongOpt("help", LongOpt.NO_ARGUMENT, n
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
for--outputdir
放入StringBuilder对象sb
。从StringBuilder选项中提取char可以让您看到它是哪个长选项,并知道如何处理该选项的参数
一些问题:
- 我以上的理解正确吗
- 为什么使用存储字符的StringBuilder?为什么不使用一个常规字符串并在其中输入完整的长选项名,即
outputdir
- 为什么不让switch语句与长选项字符串匹配?即
。这是不是因为该库是在JDK 7之前编写的,当时您无法打开字符串?然后,长期权可以像短期权一样匹配outputdir
char
,以便在switch语句中使用
取而代之的是,我转向了使用更简单的API