1

我正在尝试提高此处描述的许多命令的性能。该解决方案的一部分是重用相同的Commandline对象,该对象包装其字段包含 picocli 注释的对象。在某些情况下,此对象需要在使用之间“重置”,因为并非每个字段都由每个命令设置,并且如果某些字段具有前一个实例的旧值,则会导致错误的行为。我尝试使用注释的defaultValue属性@Option,但似乎没有在每次调用时重置字段值。

我是否必须编写自己的reset()方法,或者有没有办法用 picocli 来完成?

请注意,我仍在使用 picocli 3.9.6,但我确实计划升级到 4.x,所以如果这是解决方案的一部分,那很好。

4

1 回答 1

0

在解析命令行参数之前, Picocli 会自动将所有@Option@Parameter-annotated 字段重置为其默认值(可能是)。null(这就是允许CommandLine对象被重用的原因。)不需要用户定义的reset方法。

我尝试使用 @Option 注释的 defaultValue 属性,但它似乎没有在每次调用时重置字段值。

你能提供一个重现这个问题的例子吗?

或者,当您在应用程序中重现问题时,您可以使用系统属性运行它-Dpicocli.trace=DEBUG并发布输出吗?

请注意,我仍在使用 picocli 3.9.6,但我确实计划升级到 4.x,所以如果这是解决方案的一部分,那很好。

请务必升级到 4.x,最新版本的 picocli 修复了许多错误和新功能,总体上要好得多。但是,“重置”行为长期以来一直是 picocli 的一部分,当然在 3.x 版本中,甚至可能更早。

于 2020-03-31T21:54:09.893 回答