ホームページ >Java >&#&チュートリアル >Java のアノテーションを理解するのに役立つ記事

Java のアノテーションを理解するのに役立つ記事

无忌哥哥
无忌哥哥オリジナル
2018-07-23 10:45:142177ブラウズ

アノテーションは Java 開発者なら誰でもよく知っているものですが、私たちは非常に多くのアノテーションを使用します。アノテーションはどのように機能するのでしょうか?少し前の勉強を通じて、私はアノテーションについて新たに理解しました。

1. アノテーションとは

私たちの一般的な見方では、アノテーションはクラスおよびインターフェースと同じ宣言および使用レベルにあり、すべてが を持っています。クラスの属性。

しかし、注釈自体は本当に機能するのでしょうか?

私の言うことが信じられない場合は、自分でアノテーションを定義してコードに追加してみてください。結果は役に立ちません。

このマークでコードをマークする場合、それはコードがそのアノテーションによって表される特定の特性を持っていることを意味しますが、それはそれをアノテーションでマークすることを意味しません。一瞬で特徴が出る。

コードを実行前にコンパイルする必要がある場合もあります。このとき、このクラスを解析するためにリフレクションまたは動的プロキシ コードを埋め込み、このクラスにその固有の特性を追加する場合、そのクラスは注釈によって表される意味を持ちます。

例えば、私たちが幼稚園に通っていたとき、トイレに行くには手を上げなければなりませんでしたが、このとき、手を上げるということは、トイレに行くという注釈を付けたことを意味します。先生があなたを行かせてくれない場合、あなたはトイレに行くことはできません、あなたは我慢することしかできません。この時点で先生がクラス全体を調べて、あなたが手を挙げていることに気付いた場合、彼女はトイレに行きます。あなたの場所に行き、全員が手を挙げているクラスメートのグループと一緒にあなたをトイレに連れて行きます。そうして初めて、トイレに行く能力が発達しました。

2. 実装

私たちが目にするアノテーションのほとんどは、最初は実際には Java によって定義されていません。注釈は JavaDoc に含まれます

  • @Retention – この注釈をいつ使用するか

  • @Target – 注釈が使用される場所

  • @Inherited – サブクラスがこの注釈を継承できるかどうか

  • @文書化されたこのアノテーションは、javaDoc を生成するときに、このクラスまたはメソッドの説明を Java ドキュメントに入れるかどうかを意味します。一般に、Java に付属のプロジェクト ドキュメント ツールを使用してドキュメントを生成しないと役に立ちません。

  • @Retention、このアノテーションは、定義したアノテーションのライフサイクルを表します。以下にそのさまざまな割り当てと説明を示します。

RetentionPolicy.SOURCE: コンパイル段階で破棄されます。これらのアノテーションはコンパイル後は意味を持たなくなるため、バイトコードには書き込まれません。 @Override、@SuppressWarnings はすべてこのタイプのアノテーションに属します。

  1. RetentionPolicy.CLASS : クラスがロードされると破棄されます。バイトコード ファイルの処理に役立ちます。注釈はデ​​フォルトでこのメソッドを使用します

  2. RetentionPolicy.RUNTIME: 注釈は破棄されることはなく、注釈は実行時に保持されるため、リフレクション メカニズムを使用して注釈情報を読み取ることができます。カスタム アノテーションは通常、このメソッド

  3. @Target を使用します。これは、アノテーションがマークに使用される場所を示します。デフォルトでは、任意の要素をマークすることになっており、それに ElementType の値を割り当てることができます:

ElementType.CONSTRUCTOR。 : Use コンストラクターの記述に使用します

  1. ElementType.FIELD: メンバー変数、オブジェクト、プロパティ (enum インスタンスを含む)

  2. ElementType.LOCAL_VARIABLE: ローカル変数の記述に使用します

  3. ElementType.METHOD: メソッドの記述に使用します

  4. ElementType.PACKAGE: パッケージの説明に使用されます

  5. ElementType.PARAMETER: パラメーターの説明に使用されます

  6. ElementType.TYPE: クラス、インターフェース (注釈型を含む) または enum 宣言の説明に使用されます

  7. @Inherited は、アノテーションとサブクラス間の関係を定義します。 @Inherited メタアノテーションはマーク アノテーションであり、@Inherited は、特定のアノテーション付き型が継承されることを説明します。 @Inherited で変更されたアノテーション型がクラスに使用されている場合、このアノテーションはそのクラスのサブクラスに使用されます。

  8. 注釈をカスタマイズできます:
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**
 * 水果名称注解
 */
@Target(FIELD)
@Retention(RUNTIME)
@Documented
public @interface FruitName {
    String value() default "";
}

上記のメタ注釈はカスタム注釈サービス用です。

3. 概要

つまり、アノテーションはコードをマークするために使用されるマークであり、Java の動的プロキシとリフレクションを介して、アノテーション マークの内容を簡単に取得できます。作成したクラスまたはメソッドを操作します。次の記事では、カスタム アノテーションを定義し、その実装を作成します。

以上がJava のアノテーションを理解するのに役立つ記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。