2

nullable、つまりNonNullとNullableに関するアノテーションを正しく使用する方法については明確ではありません。
私は、次のようなもので、本当に快適ではないです:null以外のnull可否アノテーションの意味を作る

public void foo(@NonNull ArrayList<CustomObject> list) { 
    CustomObject o = list.get(0); //etc 
} 

1)は、非感守備null以外コードを宣言することですか?
2)このようなアノテーションを使用する最も効果的な方法は何ですか?例えば。例として
- ビルダーパターンを使用するときにそれらをどのように使用するのですか?
- 実装する具体的なクラスのインタフェースを定義するとき?クラスを実装するメソッドにもアノテーションが含まれているか、それとも想定されていますか?
3)上のスニペットでは、非NULL を空ではないと定義する方法はありますか?

+0

私は変数がnullではないことが保証されている知っているとき、私は通常、 '@ NonNull'を使用します。

3)

上記を考えると、私はそれをこのようにしてください。私が知っている限り、コンパイルされたコードには違いはありませんが、IDEのすべての "null"警告が抑制されます。逆に私は変数がnullになることが必要な場合があるところで '@ Nullable'を使います。 –

+0

@MichaelDodd:あなたのコードを見直す際に、あなた自身の文書化目的のためではありませんか? *他の* devsが使用/アクセスする方法はどうですか?モジュールまたはライブラリの一部であることを意図したユーティリティメソッドまたはメソッド? – Jim

+0

ドキュメンテーションと読みやすさは、 'android-annotations'の目的全体です。職場の私のチームでは、それらの注釈を広範囲に使用して、変数が決して「null」ではないことを明確にしています。同様に、ライブラリメソッドaに注釈が付いている場合、 'null'チェックが必要かどうかのアドバイスになります。 –

答えて

0

今私は調査する適切な時間があった、これは私が見つけたものです。 @NonNullアノテーションを使用しながら

1)

それはまだ守備コーディングする完璧な意味があります。パラメータに@NonNullアノテーションがあるため、実行時にnullを渡すことができます。例えば、のようなデータクラスで:

class DataClass { 
    @NonNull private String notNullString; 

    public DataClass() { notNullString = null; } 

    public String toString() { return notNullString; } 
} 

あなたは@NonNull変数にnullを代入しているが、toString()を呼び出すとnullを返しますIDE will warn。これを回避するには、why you're null-checking a @NonNull variableを要求するIDEの警告、PreConditions.checkNotNull(T)を使用する傾向があります - example codeを参照してください。

2)

コメント欄で述べたように、個人的に私はnullが期待値であるか否かをガイダンスとしてアノテーションを使用。ビルダーパターン内でこれが使用されているという確かな例は見つかりませんが、予期しないnullの値がNullPointerExceptionになるように、をbuild()メソッドで使用して強制することができます。

具体的なクラスについては、あなた次第ですが、個人的には一貫性のために追加します。

public void foo(@NonNull ArrayList<CustomObject> list) { 
    checkNotNull(list, "List is null!"); 
    if (!list.isEmpty()) { 
     CustomObject o = list.get(0); //etc 
    } 
} 
+0

私の考えでは、注釈の目的は、若干より最適化された(より少ないifs)清潔なコードにつながるヌルチェックの無数を減らすことによって、そこでの契約によるデザインを促進することになると期待していました。とにかくヌルをチェックすることが期待されるならば、その推論は複雑すぎるようです。私はそれが物事を文書化するのに役立つと理解していますが、最終的にどのように@NonNullが何を考えているかによって異なります。私は意味がありますか? – Jim

+0

ええ、それは理にかなっています。理想的な世界では、 '@ NonNull'とマークされたものに決して' null'が割り当てられないようにする 'annotationProcessor'が必要です。しかし、同じ変数が常にデフォルト値で割り当てられていることを確認する必要があります。そうでなければ[初期化されていないオブジェクト](http://stackoverflow.com/questions/16699593/uninitialized-object-vs-object-initialized-to- null)が問題になります。それは新しい一連の問題を引き起こすでしょう。 –

関連する問題