一个全局变量作为相同的方法参数 java class:这是糟糕的编程习惯吗?
A global variable as a method argument in the same java class: Is this bad programming practice?
下面的代码工作正常。但是作为新手,我不确定将全局变量作为参数传递到私有方法中是否是不好的做法 java class。这是可以接受的吗?是否有更好或更可接受的方法来做到这一点,以防这是糟糕的编程?
@Value("${canDeleteAllBefore:true}")
private boolean canDeleteAllBefore;
@Value("${canDeleteAllAfter:false}")
private boolean canDeleteAllAfter;
@Value("${canExecute:true}")
private boolean canExecute;
public ConsoleApp(@Value("${canDeleteAllBefore:true}") String canDeleteAllBefore,
@Value("${canDeleteAllAfter:true}") String canDeleteAllAfter,
@Value("${canExecute:true}") String canExecute) {
setboolean(canDeleteAllBefore, "canDeleteAllBefore", this.canDeleteAllBefore);
setboolean(canDeleteAllAfter, "canDeleteAllAfter",this.canDeleteAllAfter);
setboolean(canExecute, "canExecute",this.canExecute);
}
private void setboolean(String booleanValue, String propertyName, boolean boolValue) {
if (booleanValue.equalsIgnoreCase("true") || booleanValue.equalsIgnoreCase("false")) {
boolValue = Boolean.parseBoolean(booleanValue);
}
else {
System.out.println(booleanValue + " is not a boolean value. " +
"Please use either true or false as a value for the property " + propertyName);
System.exit(1);
}
}
如果预期 setboolean
方法将更改 canExecute
字段的值,那么很遗憾,这是不正确的。
所以当你调用这条线时
setboolean(canExecute, "canExecute",this.canExecute)
它实际上会获取this.canExecute
的当前值并将其传入。方法setboolean
不知道该值来自何处。
所以当setboolean
更新参数的值时,它不会在该函数范围之外产生任何影响。
因此,在您的情况下,更有意义的是:
private boolean setboolean(String booleanValue, String propertyName, boolean boolValue) {
if (booleanValue.equalsIgnoreCase("true") || booleanValue.equalsIgnoreCase("false")) {
return Boolean.parseBoolean(booleanValue);
}
throw new Exception("invalid value");
}
然后使用类似this.canExecute = setboolean(...);
的函数 只需使用函数的return值。
还有一个办法。你可能想看看 BooleanHolder
,它就像一个原始布尔值的包装器。优点是您可以传递它并更改持有人的内容。这与您尝试做的很接近。
下面的代码工作正常。但是作为新手,我不确定将全局变量作为参数传递到私有方法中是否是不好的做法 java class。这是可以接受的吗?是否有更好或更可接受的方法来做到这一点,以防这是糟糕的编程?
@Value("${canDeleteAllBefore:true}")
private boolean canDeleteAllBefore;
@Value("${canDeleteAllAfter:false}")
private boolean canDeleteAllAfter;
@Value("${canExecute:true}")
private boolean canExecute;
public ConsoleApp(@Value("${canDeleteAllBefore:true}") String canDeleteAllBefore,
@Value("${canDeleteAllAfter:true}") String canDeleteAllAfter,
@Value("${canExecute:true}") String canExecute) {
setboolean(canDeleteAllBefore, "canDeleteAllBefore", this.canDeleteAllBefore);
setboolean(canDeleteAllAfter, "canDeleteAllAfter",this.canDeleteAllAfter);
setboolean(canExecute, "canExecute",this.canExecute);
}
private void setboolean(String booleanValue, String propertyName, boolean boolValue) {
if (booleanValue.equalsIgnoreCase("true") || booleanValue.equalsIgnoreCase("false")) {
boolValue = Boolean.parseBoolean(booleanValue);
}
else {
System.out.println(booleanValue + " is not a boolean value. " +
"Please use either true or false as a value for the property " + propertyName);
System.exit(1);
}
}
如果预期 setboolean
方法将更改 canExecute
字段的值,那么很遗憾,这是不正确的。
所以当你调用这条线时
setboolean(canExecute, "canExecute",this.canExecute)
它实际上会获取this.canExecute
的当前值并将其传入。方法setboolean
不知道该值来自何处。
所以当setboolean
更新参数的值时,它不会在该函数范围之外产生任何影响。
因此,在您的情况下,更有意义的是:
private boolean setboolean(String booleanValue, String propertyName, boolean boolValue) {
if (booleanValue.equalsIgnoreCase("true") || booleanValue.equalsIgnoreCase("false")) {
return Boolean.parseBoolean(booleanValue);
}
throw new Exception("invalid value");
}
然后使用类似this.canExecute = setboolean(...);
的函数 只需使用函数的return值。
还有一个办法。你可能想看看 BooleanHolder
,它就像一个原始布尔值的包装器。优点是您可以传递它并更改持有人的内容。这与您尝试做的很接近。