注釈とは何ですか?
アノテーション。メタデータとも呼ばれます。コードレベルの説明。 JDK1.5以降で導入された機能で、クラス、インターフェース、列挙型と同レベルです。パッケージ、クラス、フィールド、メソッド、ローカル変数、メソッドパラメータなどの前で宣言でき、これらの要素を説明したり注釈を付けるために使用されます。
アノテーションはコード内の特別なマークとして理解でき、これらのマークはコンパイル時、クラスのロード時、および実行時に読み取られ、対応する処理を実行できます。注釈を使用すると、開発者は元のコードやロジックを変更することなく、ソース コードに補足情報を埋め込むことができます。
1. アノテーションの役割
ドキュメントの作成: コード内で特定されたアノテーションを使用してドキュメントを生成する [ドキュメント ドキュメントの生成]
コード分析: コードで識別された注釈を使用してコードを分析します [リフレクションを使用]
コンパイル チェック: コンパイラーは、コードで識別された注釈を使用して基本的なコンパイル チェックを実装できます [@Override]
# 2. JDK の事前定義アノテーション
@Override は、このアノテーションでマークされたメソッドが親クラス (インターフェイス) から継承されているかどうかを検出します。 @非推奨この注釈によって識別されるコンテンツは、古いことを示しています。使用すると、水平線が表示されます。 SuppressWarnings警告を抑制するには、通常、パラメーター all @SuppressWarnings("all") を渡します。 (ビデオ チュートリアルの推奨:java ビデオ )
3. カスタム アノテーション
Formatpublic @interface 注解名称 { 属性列表; }
public interface MyAnno extends java.lang.annotation.Annotation { }
public @interface MyAnno { int age(); String name(); //枚举类型 Person per(); //注解类型 MyAnno2 anno2(); //数组类型 String[] strs(); } //枚举类Person public enum Person { P1,P2; }
@MyAnno(age=20, name="zhangsan", per=Person.P1, anno2=@MyAnno2, strs={"zhangsan","lisi"}) public class Test { }
#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 サイトの他の関連記事を参照してください。