我正在尝试提高here中描述的许多命令的性能。该解决方案的一部分是重用相同的Commandline
对象,该对象包装了其字段包含picocli注释的对象。在某些情况下,需要在两次使用之间“重置”该对象,因为并非每个命令都设置了每个字段,并且如果某些字段具有先前实例的旧值,则会导致错误的行为。我尝试使用defaultValue
批注的@Option
属性,但似乎没有在每次调用时重置字段值。
我是否必须编写自己的reset()
方法,还是可以用picocli来实现?
请注意,我仍在使用picocli 3.9.6,但我确实打算升级到4.x,因此,如果这是解决方案的一部分,那就没问题了。
答案 0 :(得分:0)
Picocli会在紧接解析命令行参数之前自动将所有@Option
和@Parameter
注释的字段自动重置为其默认值(可能是null
)。 (这就是允许CommandLine
对象被重用的原因。)不需要用户定义的reset
方法。
我尝试使用@Option批注的defaultValue属性,但似乎没有在每次调用时重置字段值。
您能否提供一个可以重现此问题的示例?
或者,当您在应用程序中重现问题时,是否可以使用系统属性-Dpicocli.trace=DEBUG
来运行它并发布输出?
请注意,我仍在使用picocli 3.9.6,但我确实打算升级到4.x,因此,如果这是解决方案的一部分,那就没问题了。
请升级到4.x,最新版本的picocli具有许多错误修复和新功能,并且总体而言要好得多。但是,很长一段时间以来,“重置”行为一直是picocli的一部分,当然在3.x版本中,甚至可能更早。