2017-02-11 5 views
1

Javaで冗長と冗長ヌルチェックを減らしたいのですが、Javaには標準の@NotNullアノテーションがありません。C#Contracts 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

それはあなたがJavaが持っている – efekctive

+0

同期させるための方法を必要とするようだ[かなりの数の '@ NonNull'注釈](http://stackoverflow.com/questions/4963300/which-notnull-java-annotation-should-i-使用している)最も人気のあるものは、まともなIDEでサポートされるべきです。あなたが何をしても、自分の実装をロールバックしないでください。 –

+0

プラグイン可能なタイプのシステムもあなたに役立つかもしれません – efekctive

答えて

2

Javaで書いたのとは対照的に、コードコントラクトは静的に解析でき、違反があればビルドエラーが発生します。あなたが書いたJavaコードは実行時エラーのみを返します。

たとえば、メソッドのパラメータをNot Nullとしてマークし、nullチェックを行わずに上位レイヤでパラメータを呼び出そうとすると、エラーが発生します。これはコンパイル時のエラーではありません。コードコントラクトはスタティックアナライザの一部であり、Visual Studioやコードコントラクトスタティックアナライザを実装する別の製品の外部でコンパイルしている場合、捕捉されません。

詳細はthis documentationを参照してください。

関連する問題