2016-10-14 9 views
1

Which @NotNull Java annotation should I use?を信じて使用すると、@NotNull [package javax.validation.constraints]とマークされた特定のフィールドがクライアントに渡されるクラスがあります。クラスはまた、そのようなフィールドのデフォルトゲッターとセッターを実装します。以下のサンプルクラス -パラメータのGetterとSetterで@NotNullの意味

if(new MyClass().getName() !=null) { 
    //do something 
} 

が冗長このnullチェックされず、 - ビジネスロジックに次のように私は少し残っています

public class MyClass 
{ 
    public MyClass() { 
    } 

    @NotNull 
    private String name; 

    private Boolean bool; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public Boolean isBool() { 
     return bool; 
    } 

    public void setBool(Boolean bool) { 
     this.bool = bool; 
    } 
} 

はゲッターの使用にアップ困惑しました(そうでない場合)好奇心がわかるWHY

また、重複している場合は、null値を設定してparamの値を取得することを考えます。このよう試みました -

void test() { 
    myClass.setName(null); 
    if (myClass.getName() == null) { 
     System.out.println("It should not be null"); // this got printed 
    } 
} 

答えて

4

@NonNullすると、あなたのツールのためのヒントだけで、それはJava言語自体はnullをどのように処理するかには影響しません。また、すべての対話に適切な注釈を付けて、すべての間違いが見つかるようにする必要があります。

nameフィールドには注釈が付けられていますが、そのフィールドと対話するメソッドはそうではありません。そのため、ツールではこれらのメソッドとそのNULL可能性について前提はできません。あなたはこのようなより多くの注釈導入した場合

しかし:

public void setName(@Nullable String name) { 
    this.name = name; // should now have a warning 
} 

@NonNull 
public String getName() { 
    return name; 
} 

を今ツーリングはいつものように真のnew MyClass().getName() != nullを示すべきです。 setNameでは、null値をヌル値以外のプロパティに設定していると警告しています。これはおそらく間違っています。固定されている

方法:

public void setName(@NonNull String name) { 
    // setName(null) would cause a warning 
    // Also add an exception if the annotation is ignored. 
    this.name = Objects.requireNonNull(name); 
} 

/* or */ 

public void setName(@Nullable String name) { 
    if (name == null) return; // Guard against setting null 
    this.name = name; 
} 
関連する問題