javagnugetopt:理解LongOpt';字符串缓冲标志

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

我不太明白中第三个构造函数的用途。报告对其进行了如下描述:

如果表示long选项的LongOpt对象中的flag字段为非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
for
--outputdir
放入StringBuilder对象
sb
。从StringBuilder选项中提取char可以让您看到它是哪个长选项,并知道如何处理该选项的参数

一些问题:

  • 我以上的理解正确吗
  • 为什么使用存储字符的StringBuilder?为什么不使用一个常规字符串并在其中输入完整的长选项名,即
    outputdir
  • 为什么不让switch语句与长选项字符串匹配?即
    outputdir
    。这是不是因为该库是在JDK 7之前编写的,当时您无法打开字符串?然后,长期权可以像短期权一样匹配

经过一些研究,我可以澄清我自己的问题

我以上的理解正确吗

我认为这是基于实验。但对将来读到这篇文章的人开放更正

为什么使用存储字符的StringBuilder?为什么不使用一个常规字符串并在其中输入完整的长选项名,即outputdir

为什么不让switch语句与长选项字符串匹配?即outputdir。这是不是因为该库是在JDK 7之前编写的,当时您无法打开字符串?然后,长期权可以像短期权一样匹配

是的,我能找到的唯一回购协议的最后承诺是。因此,需要将匹配的选项提取到单个
char
,以便在switch语句中使用

取而代之的是,我转向了使用更简单的API