Javaアノテーションを理解する– Java @ annotationsチュートリアル

公開: 2019-10-22
パッケージレベルの注釈

アノテーションはJavaでどのようにどこで使用されますか?

Javaコンピュータプログラミング言語の注釈は、Javaソースコードに追加できる特殊な形式の構文メタデータです。

クラス、メソッド、変数、パラメーター、およびパッケージに注釈を付けることができます。 Javadocタグとは異なり、Javaアノテーションは、コンパイラによって生成されたクラスファイルに埋め込むことができ、実行時に取得できるようにJavaVMによって保持される可能性があるという点で反映できます。

Javaの既存の注釈からメタ注釈を作成することが可能であり、これによりこの概念がより洗練されたものになります。

Javaは、言語に組み込まれている一連の注釈を定義します。

Javaアノテーションを理解する-Crunchifyのヒント
Javaアノテーションを理解する–Crunchifyのヒント

Javaコードに適用される注釈:

  • @Override –関数がオーバーライドであることを確認します。 関数が親クラスの1つに見つからない場合、コンパイル警告を発生させます。
  • @Deprecated –関数を廃止としてマークします。 関数が使用されている場合、コンパイル警告を発生させます。
  • @SuppressWarnings –アノテーションパラメータで指定されたコンパイル時の警告を抑制するようにコンパイラに指示します。

他の注釈に適用される注釈:

  • @Retention –マークされたアノテーションの保存方法を指定します—コードのみ、クラスにコンパイル、または実行時にリフレクションを通じて使用可能かどうか。
  • @Documented –ドキュメントに含めるために別の注釈をマークします。
  • @Target –別の注釈をマークして、注釈を適用できるJava要素の種類を制限します。
  • @AliExpress –アノテーション付きクラスのサブクラスに継承される別のアノテーションをマークします(デフォルトでは、アノテーションはサブクラスに継承されません)。

サンプル例でこれらを見てみましょう:

1)@Overrideアノテーション:

その存在は、注釈付きメソッドが既存のスーパークラスメソッドをオーバーライドする必要があることをコンパイラーに示します。

@Overrideの最も一般的な使用例は、 Objectメソッドを使用する場合です。

@Overrideが作成された主な理由は、単純な誤植に対処するためでした。

たとえば、誤って次のように宣言されたメソッド

実際にはオーバーライドではありません。メソッド名にはすべて小文字が含まれているため、 hashValue()メソッドの名前と完全には一致しません。 ただし、完全にコンパイルされます。 このようなエラーは簡単に発生し、キャッチするのは困難です。これは危険な組み合わせです。 @Overrideアノテーションを使用すると、このようなエラーを防ぐことができます。

スーパークラスメソッドをオーバーライドするときは常に、 @ Overrideを使用する習慣を身に付ける必要があります。

Javaアノテーションを理解する

2)@Deprecated Annotation:

この注釈は、マークされた要素が非推奨であり、使用されないことを示しています。 プログラムが@Deprecatedアノテーション付きのメソッド、クラス、またはフィールドを使用するたびに、コンパイラーは警告を生成します。

要素が非推奨になると、次の例に示すように、Javadoc @deprecatedタグを使用して文書化する必要があります。

3)@SuppressWarningsアノテーション:

コンパイラに伝えてください、叫ばないでください。 私は自分が何をしているのか知っています。

4)@Retentionアノテーション:

保持注釈は、このタイプの注釈を保持する場所と期間を示します。

3つの値があります:

  • RetentionPolicy.SOURCE :このタイプの注釈は、ソースレベルでのみ保持され、コンパイラによって無視されます。
  • RetentionPolicy.CLASS :このタイプの注釈は、コンパイル時にコンパイラによって保持されますが、VMによって無視されます。
  • RetentionPolicy.RUNTIME :このタイプの注釈はVMによって保持されるため、実行時にのみ読み取ることができます。

5)@Documented Annotation:

次に、Java Docコマンドを実行して、出力を確認してください。

6)@Targetアノテーション:

ターゲットは、注釈付き注釈タイプのインスタンスを使用して注釈を付けることができるプログラム要素を示します。 Targetの値は、 java.lang.annotation.ElementType列挙型のメンバーの1つです。

  1. ANNOTATION_TYPE。 注釈付き注釈タイプは、注釈タイプ宣言に注釈を付けるために使用できます。
  2. コンストラクタ。 注釈付き注釈タイプは、コンストラクター宣言に注釈を付けるために使用できます。
  3. 分野。 注釈付き注釈タイプは、フィールド宣言に注釈を付けるために使用できます。
  4. LOCAL_VARIABLE。 注釈付き注釈タイプは、ローカル変数宣言に注釈を付けるために使用できます。
  5. 方法。 アノテーション付きアノテーションタイプは、メソッド宣言にアノテーションを付けるために使用できます。
  6. パッケージ。 注釈付き注釈タイプは、パッケージ宣言に注釈を付けるために使用できます。
  7. パラメータ。 注釈付き注釈タイプは、パラメーター宣言に注釈を付けるために使用できます。
  8. タイプ。 注釈付き注釈タイプは、型宣言に注釈を付けるために使用できます。

7)@Explicit Annotation:

名前が聞こえるように、 @Inheritedアノテーションタイプはアノテーション付きタイプのサブクラスに継承されます。

この例では、 Superclass@ForEveryone@JustForMeの両方で明示的にアノテーションが付けられています。 Subclassはどちらも明示的にマークされていません。 ただし、@ ForEveryoneには@Inheritedのアノテーションが付けられているため、 @ForEveryoneを継承します。

@JustForMeにはアノテーションが付けられていないため、 Subclassに継承されません。

これがクラスレベルのアノテーションです

クラスレベルのアノテーション