我正在编写一些代码,但我无法弄清楚我的错误是怎么回事。我希望这里有人可以给我一些答案。这是我的代码(相关部分):
public class AppData implements Callable<Integer> {
private static AppData appData = new AppData();
private AppData() {
System.out.println("AppData-Constructor");
}
public static AppData getInstance() {
return appData;
}
@Override
public Integer call() throws Exception { // your business logic goes here...
return 0;
}
private boolean _validate;
public boolean validate() {
return _validate;
}
@Option(names = { "--validate" }, description = "", defaultValue = "false", hidden = false, interactive = false, paramLabel = "", required = false, type = boolean.class)
public void set_validate(boolean validate) {
System.out.println("Set Validate: " + validate);
this._validate = validate;
if(validate)
{
System.out.println("\nBeginne Programmvalidierung\n");
Path tmp = null;
try {
// Doing some validation stuff
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
如您所见,我的班级是单身人士。注释来自 picoli,我用它来解析命令行参数。-callsSystem.out
用于调试。这是我无法解释的行为:
当我使用例如“-h”作为参数启动我的应用程序时,我得到的帮助打印得很好。显示System.out.println
单例已创建并set_validate()
使用默认值调用。但是当我--validate
用作论据时,情况就会改变。
由于某种原因,构造函数和默认集被连续调用两次。之后,set_validate()
被调用true
(因为它应该)。但是,似乎第一次调用设置了静态实例变量,而最后一次调用 true 是在第二个实例上完成的(我的理论)。结果,当我从我的主方法(在另一个类中)检查我的单例实例的状态时,我得到了错误,因为它没有在正确的实例中设置_validate
。validate()
我使用搜索引擎检查:
- 除了静态单例实例(正如预期的那样,因为它是私有的)之外,不会在任何地方调用构造函数。
_validate
除了我发布的代码外,其他地方都无法访问。set_validate()
不在任何地方调用。只有 Picocli 调用它。
我不知道接下来要检查什么。有任何想法吗?
问候
托尔斯滕
编辑:
AppData
是持有数据的多个类之一。它们都被收集在 Picocli 的一个大类中,如下所示:
class Data
{
@AddGroup(...)
AppData appData = AppData.getInstance();
@AddGroup(...)
FooData fooData = FooData.getInstance();
@AddGroup(...)
BarData barData = BarData.getInstance();
}
在我的主要方法中是这样使用的:
Data data = new Data();
CommandLine cmd = new CommandLine(data);
cmd.parseArgs(args);