JAVA Annotation & 自定義Annotation

Java 的註解是用來描述JAVA 源代碼的。

J2SE50.的java.lang包中預定義了三個註解:override,deprecated,suppressWarnings.

1. Override註釋:僅用於方法,指明註釋的方法將覆蓋父類中的方法。

2. Deprecated註釋:對不應該再使用的方法進行註釋,與被聲明過時的方法放在同一行。使用被Deprecated註釋的方法,編譯器會提示過時警告。

3. SuppressWarnings註釋:單一註釋,可以通過數組提供變量,變量值指明要忽略的特定類型的警告。@SuppressWarnings(value = {'unchecked','fallthrough'})


自定義Annotation:@interface

在講解自定義Annotation前,首先看一下對註解的註解

 Target---這個註解理解起來很簡單,即指定註解目標,eg:

@Target(ElementType.METHOD)

@interface MyAnnotation{}

@MyAnnotation// 錯誤的使用
publicclass Class1

{

@MyAnnotation// 正確的使用
publicvoid myMethod1(){}
}


Target使用一個枚舉類型屬性,它的值是ElementType.METHOD,表明這個Annotation只能爲方法註解。而不能爲其它的任何語言元素進行註解。

    public enum ElementType {  
         TYPE, // 指定適用點爲 class, interface, enum  
         FIELD, // 指定適用點爲 field  
         METHOD, // 指定適用點爲 method  
         PARAMETER, // 指定適用點爲 method 的 parameter  
         CONSTRUCTOR, // 指定適用點爲 constructor  
         LOCAL_VARIABLE, // 指定使用點爲 局部變量  
         ANNOTATION_TYPE, //指定適用點爲 annotation 類型  
         PACKAGE // 指定適用點爲 package  
    }

@Documented  
@Retention(RetentionPolicy.RUNTIME)  
@Target(ElementType.ANNOTATION_TYPE)  
public @interface Retention {  
    RetentionPolicy value();  
} 


     類中有個RetentionPolicy類,也是一個枚舉類,具體看代碼:

public enum RetentionPolicy {  
     SOURCE, // 編譯器處理完Annotation後不存儲在class中  
     CLASS, // 編譯器把Annotation存儲在class中,這是默認值  
     RUNTIME // 編譯器把Annotation存儲在class中,可以由虛擬機讀取,反射需要  
} 
     @Documented:是一個標記註釋,表示註釋應該出現在類的javadoc中,因爲在默認情況下注釋時不包括在javadoc中的。


下面開始講解如何使用自定義註解:

    定義註解:

@Retention(RetentionPolicy.RUNTIME)
@interface  MyAno
{
    String name();
    int age();
}

在Father類中註解

@MyAno(name = "tomi",age = 23)
public class Father
{
    String str;
   
    public void say()
    {     
        Father f = new Father();
        Annotation[] anos = f.getClass().getAnnotations();//取得所有註解
        for(Annotation anot : anos)
        {
            System.out.println(anot.toString());
            if(anot instanceof MyAno)
            {
                System.out.println(((MyAno)anot).name());
            }
        }      
    }

}
註解的用途:讀取配置,以及設置屬性值。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章