一个全局变量作为相同的方法参数 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,它就像一个原始布尔值的包装器。优点是您可以传递它并更改持有人的内容。这与您尝试做的很接近。