如果条件,避免文字

时间:2014-01-10 13:06:18

标签: java sonarqube pmd

这部分代码被声纳中的pmd拒绝:

public String getFoo() {
    String foo = System.getProperty("foo");

    if (foo == null) {
        foo = System.getenv("foo");
    } else if (foo == null) {
        foo = "defaultFoo";
    }

    return foo;
}

它说“在条件下避免文字”。有人能告诉我这个或这个规则试图产生什么问题吗?

2 个答案:

答案 0 :(得分:6)

你为什么不用:

public String getFoo() {
    String foo = System.getProperty("foo", "defaultFoo");

    return foo;
}

如果找不到属性,它将返回"defaultFoo"

http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#getProperty(java.lang.String, java.lang.String)

答案 1 :(得分:3)

Sonar试图说的是你应该避免null条件下的硬编码文字(如if)。

假设以下示例:

假设我们有这个if语句,Sonar警告在条件中避免文字

if (i == 5) { 
    //do something
}

通过将具有描述性名称的硬编码文字声明为(final)变量,可维护性得到增强:

final int FIVE = 5;
if (i == FIVE) {
    //do something
}

并且Sonar不再发出警告了。