注釈とは何ですか?
アノテーション。メタデータとも呼ばれます。コードレベルの説明。 JDK1.5以降で導入された機能で、クラス、インターフェース、列挙型と同レベルです。パッケージ、クラス、フィールド、メソッド、ローカル変数、メソッドパラメータなどの前で宣言でき、これらの要素を説明したり注釈を付けるために使用されます。
アノテーションはコード内の特別なマークとして理解でき、これらのマークはコンパイル時、クラスのロード時、および実行時に読み取られ、対応する処理を実行できます。注釈を使用すると、開発者は元のコードやロジックを変更することなく、ソース コードに補足情報を埋め込むことができます。
1. アノテーションの役割
ドキュメントの作成: コード内で特定されたアノテーションを使用してドキュメントを生成する [ドキュメント ドキュメントの生成]
コード分析: コードで識別された注釈を使用してコードを分析します [リフレクションを使用]
コンパイル チェック: コンパイラーは、コードで識別された注釈を使用して基本的なコンパイル チェックを実装できます [@Override]
# 2. JDK の事前定義アノテーション
@Override は、このアノテーションでマークされたメソッドが親クラス (インターフェイス) から継承されているかどうかを検出します。 @非推奨この注釈によって識別されるコンテンツは、古いことを示しています。使用すると、水平線が表示されます。 SuppressWarnings警告を抑制するには、通常、パラメーター all @SuppressWarnings("all") を渡します。 (ビデオ チュートリアルの推奨:java ビデオ )
3. カスタム アノテーション
Formatpublic @interface 注解名称 { 属性列表; }本質: Annotation は本質的にインターフェイスであり、デフォルトで Annotation インターフェイスを継承します。クラス ファイルは、javap クラス名.class コマンド
public interface MyAnno extends java.lang.annotation.Annotation { }Attributes:
public @interface MyAnno { int age(); String name(); //枚举类型 Person per(); //注解类型 MyAnno2 anno2(); //数组类型 String[] strs(); } //枚举类Person public enum Person { P1,P2; }注: は属性を定義しており、使用する場合は属性に値を割り当てる必要があります。複数の属性を区切るにはカンマを使用します。オンなので、一般的なアノテーションのメソッド名は通常、属性名として使用されます。 属性を定義するときに、default キーワードを使用して属性にデフォルトの初期化値を与える場合、使用時に属性に値を割り当てる必要はありません。 値を割り当てる必要がある属性が 1 つだけで、その属性の名前が value である場合は、値を省略できます。属性値は直接定義されます。配列を割り当てる場合、値は {} で囲まれます。配列内の値が 1 つだけの場合は、{} を省略できます。
@MyAnno(age=20, name="zhangsan", per=Person.P1, anno2=@MyAnno2, strs={"zhangsan","lisi"}) public class Test { }メタアノテーション: アノテーションの記述に使用されるアノテーション@Target現在記述されているアノテーションが機能できる位置。このアノテーションには value と という属性が 1 つだけあります。 ElementType 列挙型の配列の値を返します。 ElementType の共通値: TYPE: クラスに適用可能 METHOD: メソッドに適用可能 FIELD: 適用可能上記の @Rentension は、アノテーションが保持される段階を説明しています。アノテーションには属性値が 1 つだけあり、戻り値は RetentionPolicy 列挙型 ## の値です。
#RetentionPolicy
SOURCE: 現在記述されているアノテーションはクラス ファイルに保持されません
CLASS: 現在記述されているアノテーションはクラス バイトコード ファイルに保持されますが、クラス ファイルには保持されません。 JVM によって読み取られます
RUNTIME: 現在記述されているアノテーションはクラス バイトコード ファイルに保持され、JVM によって読み取られます。カスタム値は通常この値をとります
@Documented
現在記述されているアノテーションが API ドキュメントに抽出されるかどうか
@Inherited
現在記述されている記述アノテーションがサブクラスによって継承されるかどうか
一般に使用されるのは最初の 2 つですメタアノテーション。
4. アノテーションの使用プログラム内でアノテーションを使用する: クラスの getAnnotation を通じて、これらの
// pro 注解 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface pro { String className(); String methodName(); } //在程序中使用注解 @pro(className="anli.Demo1", methodName = "show1") public class UseAnno { public static void main(String[] args) throws Exception { //获取这个类的class对象 Class<UseAnno> useAnnoClass = UseAnno.class; //获取指定的注解类子类对象 pro proAnno = useAnnoClass.getAnnotation(pro.class); //执行注解中的方法,获取注解中属性的值 String className = proAnno.className(); String methodName = proAnno.methodName(); }
で定義された属性値を取得します。 class()メソッドで取得するのはアノテーションクラスの実装クラスのオブジェクトであり、このオブジェクトによりアノテーション内のメソッドを実行することができ、戻り値はアノテーション利用時に設定された属性値となります。実際には、アノテーション インターフェイスのサブクラス実装オブジェクトがメモリ内に生成されます。
public class ProImpl implements Pro{ public String className(){ return "cn.itcast.annotation.Demo1"; } public String methodName(){ return "show"; } }
推奨チュートリアル:
Java 開発入門以上がJava アノテーションをより効果的に使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。