Java 声纳错误-应避免内部分配

Java 声纳错误-应避免内部分配,java,sonarqube,Java,Sonarqube,我尝试切换一个名为toggle的类级布尔值,如下所示: public void myClass() { private boolean toggle = false; public void process(){ while (x < y) { if (toggle()){ //do some stuff } else { //do some

我尝试切换一个名为
toggle
的类级布尔值,如下所示:

public void myClass() {

    private boolean toggle = false;

    public void process(){
        while (x < y) {
            if (toggle()){
                //do some stuff
            } else {
                //do some other stuff
            }
        }       
    }

    private boolean toggle() {
        return this.toggle = this.toggle ? false : true;
    }
}
public void myClass(){
私有布尔切换=false;
公共程序(){
while(x

但是声纳抱怨
返回this.toggle=this.toggle?假:真说“应该避免内部赋值”。如果我重构它以将类级布尔值传递到
toggle()
方法中,它将不起作用,并且总是返回true。有没有一种不用声纳抱怨就能达到同样效果的优雅方法

您可以通过将方法的目的分为两部分来完成此任务:

  • 切换布尔值
  • 返回新结果
  • 将实例变量作为参数传递到方法中无效

    代码越简单越好,可读性也越强

    我避免尝试将三元运算符与赋值混合,因为这样会试图同时做两件事,而且可能不清楚,尤其是在不记住赋值运算符(=)和三元运算符(?:)之间的优先顺序的情况下

    此外,三元运算符是不必要的;求反运算符
    将为您切换布尔值

    private boolean toggle() {
        this.toggle = !this.toggle;
        return this.toggle;
    }
    
    如果碰巧要使用布尔值的上一个值,请在更改该值之前先将其存储到局部变量中

    private boolean toggle() {
        boolean prevToggle = this.toggle;
        this.toggle = !this.toggle;
        return prevToggle;
    }
    

    虽然我没有使用SonarQube,但此更改应该消除关于内部分配的警告,并且应该使您的代码更清晰,更易于维护。

    感谢您的帮助,我现在将尝试您的解决方案:-)