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,但此更改应该消除关于内部分配的警告,并且应该使您的代码更清晰,更易于维护。感谢您的帮助,我现在将尝试您的解决方案:-)