2013-10-07 45 views
0

我已經在代碼中看到這周圍哪裏有中爲什麼有人使用@ParametersAreNotNullByDefault?

@ParametersAreNotNullByDefault 
public class A 
{ 
private String id; 

public A(final String id) 
{ 
this.id = id; 
} 
} 

的聲明是什麼註解我們買?有了這個註釋難道我們不應該做檢查,像

if (id==null) 
throw new IllegalArgumentException(); 

回答

2

我猜你指的實際上是@ParametersAreNonnullByDefault註釋,考慮到谷歌不知道什麼註釋@ParametersAreNotNullByDefault在所有。

這個註釋有一些文檔here,以及相關的SO問題(我相信或多或少可以回答你的問題)here

使用註釋執行從JSR-305,下面的代碼:

@ParametersAreNonnullByDefault 
public class NonnullTest 
{ 

    public static boolean parameterIsNull(Object o) 
    { 
     return (o == null); 
    } 

    public static void main(String[] args) 
    { 
     boolean str = parameterIsNull("foo"); 
     boolean nul = parameterIsNull(null); 

     System.out.println("String returned: " + Boolean.toString(str)); 
     System.out.println("null returned: " + Boolean.toString(nul)); 
    } 

} 

編譯並沒有錯誤執行,並打印:

String returned: false 
null returned: true 

如此看來,此批註不積極防止null值通過異常或其他方式傳遞,並且您仍然需要檢查您的參數是否無效。

這與我在JSR-305項目頁面上閱讀的內容一致,這似乎表明它添加的註釋點是靜態代碼分析

+0

但它確實檢查爲空? – Phoenix

+0

我已經用一個簡單的測試用例更新了我的答案,以證明它並未實際檢查空值。 – CmdrMoozy

+1

哦老鼠......如果我使用JetBrains的NotNull,它會拋出一個異常,如果它違反了條件,但如果我使用標準Nonnull(或ParametersAreNonnullByDefault)它不會。即使IDEA允許我配置要使用的註釋,但它似乎只能用於檢查自己的註釋。 :( – Trejkaz

相關問題