Java注記学習ノート
14294 ワード
回転元:http://wanqiufeng.blog.51cto.com/409430/458883
一、java注釈とは何か
注釈、その名の通り、注釈とは、ある物事に注釈の説明を追加し、いくつかの情報を保存することであり、これらの情報は後である時間帯に役立つ可能性があります.Java注釈はjava注釈とも呼ばれ、javaはメソッド、クラス、パラメータ、パケット、ドメイン、変数などに基準を追加できるメカニズムを提供しています(つまり、いくつかの情報を添付します).また、その後の期間において、反射によって寸法の情報を抽出して使用する.二、カスタムJava寸法
1注釈をカスタマイズする理由
Javaでは、1.5以降のデフォルトで3つの寸法が組み込まれています.@Override:親を書き換える方法を他の人に伝えるには、方法の上にしか使用できません. @Deprecated:古いAPIを使わないことをお勧めします.コンパイルするときは警告メッセージを生成し、プログラム内のすべての要素に設定することができます. @SuppressWarnings:このタイプは、警告メッセージを一時的に閉じることができます. しかし、この3つの寸法だけでは、私たちが開発したときのニーズを満たすことはできません.だからjavaは注釈をカスタマイズして使用することができます.
2注釈のカスタマイズ方法
カスタム・ステップは、大きく分けて2つのステップに分けられます.@interfaceキーワード(interfaceではなく@interaceであることに注意)によって注釈名、および注釈のメンバー属性または注釈と呼ばれるパラメータを宣言します. javaに組み込まれた4つのメタ注釈を使用して、このカスタム寸法の機能と範囲をいくつか制限します.
問題が来ました.メタ注釈とは何ですか.
3メタ注記とは
メタ注釈とは、注釈を定義する注釈であり、すなわち、これらのメタ注釈は、他の注釈を制約するための注釈に特化した役割を果たす.
上記の3つの注釈を区別してください.彼らもメタ注釈によって定義されています.
主に4つの@Target,@Retention,@Documented,@Inheritedがありますか?
4注釈のカスタマイズおよび使用例
クラスレベルの寸法Descriptionをカスタマイズ
メソッドレベルの注記Nameを再定義
次に、上記の2つの注記を使用します.
注釈の情報を抽出
注意事項:
すべての
Annotation
自動的に継承されます
java.lang.annotation
このインタフェース
,
他のクラスやインタフェースを継承することはできません
.
最も重要な点
,Annotation
タイプ内のパラメータはどのように設定しますか?
:
第一
,
使うしかない
public
またはデフォルト
(default)
この2つのアクセス修飾
.
たとえば
,String value();
ここでは方法を
defaul
デフォルトのタイプ
.
2番目
,
パラメータ・メンバーは基本タイプのみ使用できます
byte,short,char,int,long,float,double,boolean
8つの基本データ型と
String,Enum,Class,annotations
等データ型
,
これらのタイプの配列も
.
たとえば
,String value();
ここのパラメータメンバーは
String.
参考資料:
http://www.javaeye.com/topic/36659 #
http://www.javaeye.com/topic/400085
一、java注釈とは何か
注釈、その名の通り、注釈とは、ある物事に注釈の説明を追加し、いくつかの情報を保存することであり、これらの情報は後である時間帯に役立つ可能性があります.Java注釈はjava注釈とも呼ばれ、javaはメソッド、クラス、パラメータ、パケット、ドメイン、変数などに基準を追加できるメカニズムを提供しています(つまり、いくつかの情報を添付します).また、その後の期間において、反射によって寸法の情報を抽出して使用する.二、カスタムJava寸法
1注釈をカスタマイズする理由
Javaでは、1.5以降のデフォルトで3つの寸法が組み込まれています.
2注釈のカスタマイズ方法
カスタム・ステップは、大きく分けて2つのステップに分けられます.
問題が来ました.メタ注釈とは何ですか.
3メタ注記とは
メタ注釈とは、注釈を定義する注釈であり、すなわち、これらのメタ注釈は、他の注釈を制約するための注釈に特化した役割を果たす.
上記の3つの注釈を区別してください.彼らもメタ注釈によって定義されています.
主に4つの@Target,@Retention,@Documented,@Inheritedがありますか?
1 :@Target,@Retention,@Documented,@Inherited
2
3 @Target , ElemenetType :
4 ElemenetType.CONSTRUCTOR
5 ElemenetType.FIELD ( enum )
6 ElemenetType.LOCAL_VARIABLE
7 ElemenetType.METHOD
8 ElemenetType.PACKAGE
9 ElemenetType.PARAMETER
10 ElemenetType.TYPE , ( ) enum
11
12 @Retention 。 RetentionPolicy :
13 RetentionPolicy.SOURCE
14 RetentionPolicy.CLASS class , VM
15 RetentionPolicy.RUNTIME VM , 。
16
17 @Documented javadoc
18
19 @Inherited
4注釈のカスタマイズおよび使用例
クラスレベルの寸法Descriptionをカスタマイズ
1 package lighter.javaeye.com; 2 import java.lang.annotation.Documented; 3 import java.lang.annotation.ElementType; 4 import java.lang.annotation.Retention; 5 import java.lang.annotation.RetentionPolicy; 6 import java.lang.annotation.Target; 7
8 @Target(ElementType.TYPE)//
9 @Retention(RetentionPolicy.RUNTIME)//
10 @Documented// javadoc
11 public @interface Description { 12 String value(); 13 }
メソッドレベルの注記Nameを再定義
1 package lighter.javaeye.com; 2 import java.lang.annotation.Documented; 3 import java.lang.annotation.ElementType; 4 import java.lang.annotation.Retention; 5 import java.lang.annotation.RetentionPolicy; 6 import java.lang.annotation.Target; 7
8 // @Target @Description ,
9 @Target(ElementType.METHOD) 10 @Retention(RetentionPolicy.RUNTIME) 11 @Documented 12 public @interface Name { 13 String originate(); 14 String community(); 15 }
次に、上記の2つの注記を使用します.
1 package lighter.javaeye.com; 2
3 @Description(value="javaeye, ") 4 public class JavaEyer { 5 @Name(originate=" :robbin",community="javaEye") 6 public String getName() 7 { 8 return null; 9 } 10
11 @Name(originate=" : ",community="springside") 12 public String getName2() 13 { 14 return " id , , !"; 15 } 16 } 17
18 : “@Description(value="javaeye, ")”, “@Description("javaeye, ") ”, 。
Description ( ) value。
value , 。
value des, , , :@Description(Des=”xxx”)*/
注釈の情報を抽出
1 package lighter.javaeye.com; 2
3 import java.lang.reflect.Method; 4 import java.util.HashSet; 5 import java.util.Set; 6
7 public class TestAnnotation { 8 /**
9 * author lighter 10 * : Annotation API javaDoc 11 */
12 public static void main(String[] args) throws Exception { 13 String CLASS_NAME = "lighter.javaeye.com.JavaEyer"; 14 Class test = Class.forName(CLASS_NAME); 15 Method[] method = test.getMethods(); 16 boolean flag = test.isAnnotationPresent(Description.class); 17 if(flag) 18 { 19 Description des = (Description)test.getAnnotation(Description.class); 20 System.out.println(" :"+des.value()); 21 System.out.println("-----------------"); 22 } 23
24 // JavaEyer @Name Set
25 Set<Method> set = new HashSet<Method>(); 26 for(int i=0;i<method.length;i++) 27 { 28 boolean otherFlag = method[i].isAnnotationPresent(Name.class); 29 if(otherFlag) set.add(method[i]); 30 } 31 for(Method m: set) 32 { 33 Name name = m.getAnnotation(Name.class); 34 System.out.println(name.originate()); 35 System.out.println(" :"+name.community()); 36 } 37 } 38 }
注意事項:
すべての
Annotation
自動的に継承されます
java.lang.annotation
このインタフェース
,
他のクラスやインタフェースを継承することはできません
.
最も重要な点
,Annotation
タイプ内のパラメータはどのように設定しますか?
:
第一
,
使うしかない
public
またはデフォルト
(default)
この2つのアクセス修飾
.
たとえば
,String value();
ここでは方法を
defaul
デフォルトのタイプ
.
2番目
,
パラメータ・メンバーは基本タイプのみ使用できます
byte,short,char,int,long,float,double,boolean
8つの基本データ型と
String,Enum,Class,annotations
等データ型
,
これらのタイプの配列も
.
たとえば
,String value();
ここのパラメータメンバーは
String.
参考資料:
http://www.javaeye.com/topic/36659 #
http://www.javaeye.com/topic/400085