Java args4j:in";用法“;如何手动排序选项?
在args4j中,我定义了如下选项:Java args4j:in";用法“;如何手动排序选项?,java,Java,在args4j中,我定义了如下选项: @Option(name="-host",usage="host to connect") @Option(name="-port",usage="port of the host") @Option(name="-idle",usage="idle") 但是,当显示帮助时,args4j始终按字母顺序打印 -host - host to connect -idle - idle -port - port to connect 这不方便,因为我想先显示强制
@Option(name="-host",usage="host to connect")
@Option(name="-port",usage="port of the host")
@Option(name="-idle",usage="idle")
但是,当显示帮助时,args4j始终按字母顺序打印
-host - host to connect
-idle - idle
-port - port to connect
这不方便,因为我想先显示强制选项。另外,我想自己设置选项的顺序,因为有些选项(如主机和端口)应该一起使用
如何控制args4j中选项的顺序
我发现同样的问题在3年前被问到,但没有得到回答。你不能使用当前的Args4j(至少据我所知),但由于它是开源的,我鼓励你自己实现它,并尝试在源代码中获得补丁以获得新版本 来源:
org.kohsuke.args4j.CmdLineParser
:
// for display purposes, we like the arguments in argument order, but the options in alphabetical order
Collections.sort(options, new Comparator<OptionHandler>() {
public int compare(OptionHandler o1, OptionHandler o2) {
return o1.option.toString().compareTo(o2.option.toString());
}
});
//出于显示目的,我们喜欢参数按参数顺序排列,但选项按字母顺序排列
Collections.sort(选项,新的Comparator(){
公共整数比较(OptionHandler o1,OptionHandler o2){
返回o1.option.toString().compareTo(o2.option.toString());
}
});
三年后这个问题仍然没有解决。但有一个解决办法
由于CmdLineParser
使用列表存储选项,并且该列表通过getOptions()
公开,因此您可以获取该列表并自行排序。因为列表仅在构造函数中排序。您可以在构造CmdLineParser
后随时对其进行排序。然后对printUsage()
的输出进行排序
此解决方法取决于
CmdLineParser
的实现,因此它不是一个很好的仿真示例。但作为一种解决方法,它至少在当前版本(2.0.28)上有效。您可以通过ParserProperties设置排序,然后在CmdLineParser构造函数中使用排序。如果将OptionSorter设置为null,则将保留选项顺序:
ParserProperties properties = ParserProperties.defaults();
properties.withOptionSorter(null);
CmdLineParser parser = new CmdLineParser(YOUR_OPTIONS_CLASS, properties);
因此,在问题的示例中,您将得到:
-host - host to connect
-port - port to connect
-idle - idle
目前我正忙于其他项目(甚至不是Java),但如果有人能做到这一点,那就太好了:)