2013-10-11 21 views
2

我嘗試刪除項目中的所有PMD警告,並且遇到一些困難。我有一個方法返回一個Container對象。這是我原來的方法(簡化):PMD「發現'DD'-anomaly」vs「只有一個返回語句」

try { 
    return setResult(); 
} catch (Exception ex) { 

} 
return null; 

PMD警告說有2個返回語句。所以我試過這個:

Container result = null; 
try { 
    result = setResult(); 
} catch (Exception ex) { 

} 
return result; 

=> PMD警告用null初始化。所以我試過這個:

Container result; 
try { 
    result = setResult(); 
} catch (Exception ex) { 

} 
return result; 

=> Eclipse沒有編譯,建議使用「= null」變體。

我在這裏錯過了什麼?我該如何編寫這種沒有PMD警告的方法?

回答

1

我會使用第二種方法告訴你:

Container result = null; 
try { 
    result = setResult(); 
} catch (Exception ex) { 

} 
return result; 

因爲,PMD指出的,以避免降低複雜性的目的不必要的return語句是很重要的。

PMD文檔將NullAssignment rule as "controversial"分類。這非常有用取決於上下文。下面是他們提供的示例代碼:

public void bar() { 
    Object x = null; // this is OK 
    x = new Object(); 
    // big, complex piece of code here 
    x = null; // this is not required 
    // big, complex piece of code here 
} 

所以,除非你可以用一個有意義的值預先指定Container變量 - 你應該忽略這個規則的代碼片段。

如果你想完全避免空分配,你可以使用Guava's Optional。在這種情況下,它具有以下優點:

  1. 它迫使你想想沒有價值的
  2. 它使代碼更容易理解
  3. 它使PMD快樂