我使用Sonarqube来分析我的Java代码,并且我收到了一些消息问题:
字符串文字表达式应位于等于比较的左侧
这很容易用字符串解决,翻转顺序以避免可能的NullPointerException
s
//From this:
myString.equals("otherString");
//To this:
"otherString".equals(myString);
但是,我对非String类型有这些问题,例如在以下代码中:
if (myObject.getIntegerAttribute.equals(1)){ // <-Sonarqube shows the issue here
// ...
}
因为我无法翻转&#34; 1&#34;因为它是一种原始类型,并且没有equals()
方法,我该如何解决这些问题呢?
答案 0 :(得分:2)
您可以通过明确地将int
装入Integer
来解决问题:
if (Integer.valueOf(1).equals(myObject.getIntegerAttribute)) { // <-- explicit box
// ...
}
通过返回myObject.getIntegerAttribute
,这将正确处理null
为false
的情况。
请注意,这不会产生任何开销:将Integer value = 1
声明为Integer value = Integer.valueOf(1)
。另请注意,由于此值(1)已缓存,因此实际上不会创建新的Integer
对象。
答案 1 :(得分:1)
Integer test = 1;
if ( test.equals(myObject.getIntegerAttribute())
应该有助于解决您的问题。然后再说一次:真的值得存储局部变量吗?
if ( Integer.valueOf(1).equals(myObject.getIntegerAttribute())
可能是一种改进。
由于您可以自行配置声纳规则,因此根据您的配置很难说哪一个最佳。