四種元註解:@Retention @Target @Document @Inherited

java中元註解有四個: @Retention @Target @Document @Inherited;

   @Retention:註解的保留位置         

      @Retention(RetentionPolicy.SOURCE)   //註解僅存在於源碼中,在class字節碼文件中不包含

      @Retention(RetentionPolicy.CLASS)     // 默認的保留策略,註解會在class字節碼文件中存在,但運行時無法獲得,

      @Retention(RetentionPolicy.RUNTIME)  // 註解會在class字節碼文件中存在,在運行時可以通過反射獲取到

  

  @Target:註解的作用目標

        

        @Target(ElementType.TYPE)   //接口、類、枚舉、註解

        @Target(ElementType.FIELD) //字段、枚舉的常量

        @Target(ElementType.METHOD) //方法

        @Target(ElementType.PARAMETER) //方法參數

        @Target(ElementType.CONSTRUCTOR)  //構造函數

        @Target(ElementType.LOCAL_VARIABLE)//局部變量

        @Target(ElementType.ANNOTATION_TYPE)//註解

        @Target(ElementType.PACKAGE) ///包   

 

     @Document:說明該註解將被包含在javadoc中

 

   @Inherited:說明子類可以繼承父類中的該註解

 

舉例:

       

@Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.METHOD})
    public @interface AnnatDemo{
        public int value();
    }

以上代碼定義了@AnnatDemo註解,作用目標是 用於對方法註解,並且保留在運行時的環境中,我們可以利用反射 獲得一個方法上的註解  調用定義的方法,

 

比如@AnnatDemo 作用於以下方法:

public interface IClientProtocolEx extends IProtocol {

  int METHOD_START=0;

  @AnnatDemo(METHOD_START)
   public String say(String person);

}

 

那麼可以利用以下代碼進行反射:       

 Class ipt=IClientProtocalEx.class;

   Method[] mts=ipt.getMethod();

         for(Method mt:mts)

   {

    AnnatDemo ad=mt.getAnnotation(AnnatDemo.class);//如果方法上  沒有該註解  則返回null

           int value=ad.value();

       System.out.println("value:"+value);

   }

 

註解是用於建設基礎jar包的一部分   項目都有自己的框架,若運用恰當,註解則爲其中良好的一部分!

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