我有以下代码,而且我得到了SonarQube
更改此条件,使其不会始终评估为false
这行代码request .postData.contents
是给我一个sonarqube错误的代码。
if(hashCodeVariable == null && equalsVariable.equals(EQUALS_METHOD)) {
对于那些使用@Override
public void visitNode(Tree tree) {
MethodTree mt = null;
ClassTree classTree = (ClassTree) tree;
if (!hasSemantic()) {
return;
}
for (Tree memberTree : classTree.members()) {
if (memberTree.kind().name().equals(Kind.METHOD.name())) {
mt = (MethodTree) memberTree;
methods.add(mt);
}
}
storeMethodValue(mt);
}
public void storeMethodValue(MethodTree mt) {
String methodName;
try {
for (MethodTree method : methods) {
methodName = PUBLIC + SPACE + method.returnType().symbolType().name()
+ SPACE + method.symbol().name();
checkMethodName(methodName);
}
if(hashCodeVariable.equals(HASH_CODE_METHOD) && equalsVariable == null) {
reportIssue(mt, "in");
return;
}
if(hashCodeVariable == null && equalsVariable.equals(EQUALS_METHOD)) {
reportIssue(mt, "out");
return;
}
}
catch (NullPointerException nullPointer) {
throw nullPointer;
}
}
public void checkMethodName(String methodName) {
if (methodName.equals(EQUALS_METHOD)) {
equalsVariable = methodName;
} else if (methodName.equals(HASH_CODE_METHOD)) {
hashCodeVariable = methodName;
}
}
知识渊博的人,我的代码有点好吗?我应该做些什么改变?
答案 0 :(得分:3)
对hashCodeVariable的null测试是没有意义的,因为在第一种情况下使用了.equals。
if(hashCodeVariable.equals(HASH_CODE_METHOD) && equalsVariable == null) {
...
if(hashCodeVariable == null && equalsVariable.equals(EQUALS_METHOD)) {
hashCodeVariable是!null,否则在第一个if语句中会引发NullPointerException。所以条件是假的。
答案 1 :(得分:2)
此时hashCodeVariable
为非null,否则将在前一个if-block中抛出NullPointerException
。那个条件是false
。 &&
已被短路,false && whatever
为false
,未经评估。