这部分代码被声纳中的pmd拒绝:
public String getFoo() {
String foo = System.getProperty("foo");
if (foo == null) {
foo = System.getenv("foo");
} else if (foo == null) {
foo = "defaultFoo";
}
return foo;
}
它说“在条件下避免文字”。有人能告诉我这个或这个规则试图产生什么问题吗?
答案 0 :(得分:6)
你为什么不用:
public String getFoo() {
String foo = System.getProperty("foo", "defaultFoo");
return foo;
}
如果找不到属性,它将返回"defaultFoo"
。
答案 1 :(得分:3)
Sonar试图说的是你应该避免null
条件下的硬编码文字(如if
)。
假设以下示例:
假设我们有这个if
语句,Sonar警告在条件中避免文字:
if (i == 5) {
//do something
}
通过将具有描述性名称的硬编码文字声明为(final
)变量,可维护性得到增强:
final int FIVE = 5;
if (i == FIVE) {
//do something
}
并且Sonar不再发出警告了。