我最近将我的项目升级到 Picocli 4.2.0,包括删除所有不推荐使用的方法调用,并且我一直在继续我在这里描述的工作。我又遇到了同样的问题——我有一个似乎没有重置的字段。与我的其他问题唯一不同的是,现在该字段是一个集合。代码如下所示:
@Command(name="watch", description="Alters the set of watched productions", subcommands={HelpCommand.class})
static public class Watch implements Runnable
{
@ParentCommand
ProductionC parent; // injected by picocli
@Option(names={"on", "-e", "--on", "--enable"}, description="Enables watching of given productions")
List<String> productionsToEnable;
@Option(names={"off", "-d", "--off", "--disable"}, description="Disables watching of given productions")
List<String> productionsToDisable;
@Override
public void run()
{ ... }
(此处提供完整代码。)
具体来说,productionsToEnable
似乎没有重置。调用的方式是单元测试的一部分:
@Test
public void testCanListTracedRules() throws Exception
{
loadRules();
agent.getInterpreter().eval("production watch --on b");
agent.getInterpreter().eval("production watch --on c");
final StringWriter result = new StringWriter();
agent.getPrinter().pushWriter(result);
agent.getInterpreter().eval("production watch");
agent.getPrinter().popWriter();
assertEquals("b\nc", result.toString());
}
(此处提供完整代码。)
当最后一次调用命令时"c"
,最后一次调用的字符串production watch
仍然存在。productionsToEnable
production watch
eval
请注意,上面的代码链接位于jsoar-command-performance
分支上,以防有助于仔细查看。