我正试图提高here所描述的许多命令的性能。该解决方案的一部分是重用同一个Commandline对象,该对象包装的对象的字段中包含picocli注释。在某些情况下,这个对象需要在使用之间“重置”,因为不是每个字段都是由每个命令设置的,而且如果某些字段具有来自上一个实例的旧值,则会导致错误的行为。我试图使用defaultValue注释的@Option属性,但它似乎没有在每次调用中重置字段值。
我是否必须编写自己的reset()方法,还是有一种方法可以用picocli实现这一点?
注意,我仍然使用picocli 3.9.6,但我确实计划升级到4.x,所以如果这是解决方案的一部分,那就好了。
发布于 2020-03-31 21:54:09
Picocli在解析命令行参数之前会自动将所有@Option和@Parameter-annotated字段重置为默认值(可能是null)。(这就是允许重用CommandLine对象的原因。)不需要用户定义的reset方法.
我尝试使用@Option注释的defaultValue属性,但它似乎没有在每次调用中重置字段值。
你能提供一个再现这个问题的例子吗?
或者,当您在应用程序中再现问题时,可以使用系统属性-Dpicocli.trace=DEBUG运行它并发布输出吗?
注意到我仍在使用picocli3.9.6,但我确实计划升级到4.x,所以如果这是解决方案的一部分,那就好了。
请升级到4.x,picocli的最新版本有很多bug修复和新特性,而且总体上要好得多。然而,“重置”行为已经存在很长一段时间了,当然在3.x版本中,甚至可能更早。
https://stackoverflow.com/questions/60959846
复制相似问题