2017-02-11 32 views
1

我想減少Java中冗餘和冗長的空檢查,但我知道Java沒有標準的@NotNull註釋,因爲c#具有可以使用的合約,例如C#合同vs NotNull /在Java中推出自己的

Contract.Requires(x != null); 

我可能會錯過一些東西,但是我不能自己編碼嗎?

public class Contract { 

    public static void requireNotNull(Object object) { 
     if (object == null) 
      throw new IllegalArgumentException("Contract forbids null"); 
    } 

} 

這是否缺少@NotNull或合同的任何好處?

+0

看來你需要的方法是同步的 – efekctive

+0

Java有[相當一些'@ NonNull'註釋](http://stackoverflow.com/questions/4963300/which-notnull-java-annotation-should-i-使用)和最流行的應該由任何像樣的IDE支持。無論你做什麼,都不要推出自己的實現。 –

+0

可插式類型系統也可以幫助你 – efekctive

回答

2

與您在Java中編寫的代碼相比,代碼合同可以靜態分析,並且如果違反將會產生構建錯誤。您編寫的Java代碼只會給出運行時錯誤。

例如,如果您將方法上的某個參數標記爲Not Null,然後嘗試在較高層調用它而不執行空檢查,則會出現錯誤。這不是編譯時錯誤,因爲代碼合約是靜態分析器的一部分,因此如果您正在編譯Visual Studio或其他實現代碼合同靜態分析器的產品之外,它將不會被捕獲。

請參閱this documentation瞭解更多詳情。