2017-08-05 25 views
1

私はこれらのアノテーションのうちどれを使用しますか? INTELLIJは注釈付きの独自の図書館を導入しました。私は、メソッドパラメータとクラスattrbiutesをこれらの注釈でマークすることは実用的ですが、彼らが何をしているのだろうと思います。注釈付きのライブラリがたくさんあります(春にもNullableのようなアノテーションがあります)。 Javaxアノテーションは、特定のクラスを検証するhibernateバリデーターによって実装されますが、メソッドの属性についてのみremellまたは警告するINTELLIJアノテーションは実装されていません。すべての注釈は、実行時にchekcedされているのIntelliJ注釈@NotNull javaxアノテーションとIntellij @NotNullアノテーション

public class XYZ{ 
@NotNull 
private int id; 
@Nullable 
private String z; 
@NotNull 
private String y; 

} と

public void method(@NotNull String a,String b) 
{ 
... 
} 

を持つクラスを持っている@NotNullパラメータはnullになります場合、私は、何がのIntelliJを行うだろうと言うことができますか?それは、何かエラーやそれのような何かをスローしません、私に警告するだけで、それはなぜ私の役に立つことができますか?私は、自分のコードを読んでみる人にとっては、もっと役に立つと思う。

私のユーザーにManyToManyリレーションがある場合の別の例では、@ Nullableとしてマークする必要がありますか?新しいユーザーを作成したときに毎回nullになるので、必要ではありませんか?

+0

可能な限り標準を使用しますが、 'Nullable'と' NotNull'という奇妙な歴史のため、実際には単純な名前*をチェックし、パッケージに関係なく 'NotNull'という名前の注釈をすべて扱います。具体的なツールのドキュメントを見て、それらの解釈方法を確認してください。 – chrylis

答えて

0

は、私はあなたが物事を混合していると信じて:

  1. IntelliJの注釈がそうなバグをスポッティングに開発者を支援するためにをしています。たとえば、パラメータがNullableであると言うと、NullPointerExceptionsに対してコードを保護していない場合、警告が表示されます。これはコンパイル時に行うことができます(実行時には関係ありません)。
  2. 妥当性検証アノテーションではなく、フィールドにバリデーションを追加し、満たされていない場合はエラーをスローします。 それはあなたのビジネスに関するもので、コードのバグに関するものではありません;バグは全くないかもしれません。たとえば、外部入力が特定の基準に一致するかどうかを検証するために使用できます。外部から呼び出されるようにアプリケーションでAPIを実装するとしましょう。 NotNullアノテーションをフィールドに追加すると、API呼び出し側がそのフィールドを設定しないとエラーが発生します。あなたのアプリケーションはまったく問題なく、バグはありません。明らかに、これらの検証はデータに関するものであり、実行時に行われます。
関連する問題