@深入註解,在Java中設計和使用自己的註解 – JAVA編程語言程序開發技術文章

我們用過JDK給我們提供的  @Override  @Deprecated @SuppressWarning 註解  ,這些註解是JDK給我們提供的,我們隻是在用別人寫好的東西,那麼我們是否可以自己寫註解呢?當然是可以的  。
我們寫的註解包括三個環節
1、 註解的聲明,也就是註解類的定義     形式如下        @interface 來進行註解的聲明
package me.test;  
import java.lang.annotation.* ;//導入註解包中所有註解
@Retention(RetentionPolicy.RUNTIME)   //解釋如下
@Target(ElementType.TYPE)//解釋如下
public @interface MyAnnotation             
{
}
@Retention(RetentionPolicy.RUNTIME)  
指定瞭註解保留的周期 註解的生命周期有是三個   RetentionPolicy 枚舉的三個值代表瞭三個聲明周期  默認是CLASS
 
枚舉常量摘要
CLASS
          編譯器將把註釋記錄在類文件中,但在運行時VM 不需要保留註釋。
RUNTIME
          編譯器將把註釋記錄在類文件中,在運行時VM 將保留註釋,因此可以反射性地讀取。
SOURCE
          編譯器要丟棄的註釋。
 
@Target(ElementType.TYPE)
這個標識註解應該標在那裡   ElementType的幾個枚舉值就代表瞭  註解應該寫在的位置
 
CONSTRUCTOR
          構造方法聲明
FIELD
          字段聲明(包括枚舉常量)
LOCAL_VARIABLE
          局部變量聲明
METHOD
          方法聲明
PACKAGE
          包聲明
PARAMETER
          參數聲明
TYPE
          類、接口(包括註釋類型)或枚舉聲明
 
2、 使用瞭註解的類 或者方法
@MyAnnotation
class  A
{
}
3、 利用反射來操作註解   詳細見代碼
Class類有一個 方法
 
<A extends Annotation>
A        getAnnotation(Class<A> annotationClass)
 
這個方法接受一個註解的字節碼參數  ,然後返回這個類所標識的註解對象,因為我們標識瞭一個註解就相當於產生瞭一個註解對象  。
 
boolean   isAnnotationPresent(Class<? extends Annotation> annotationClass)
 
這個方法判斷一個類是否被註解所標識
下面是代碼示例
MyAnnotationTest.java中
package me.test;
import java.lang.annotation.Annotation;
@MyAnnotation
public class MyAnnotationTest

 
    public static void main(String []args)
    {
     if(MyAnnotationTest.class.isAnnotationPresent( MyAnnotation.class))
     {
       MyAnnotation an=(MyAnnotation)MyAnnotationTest.class.getAnnotation(MyAnnotation.class) ;
       System.out.println(an.toString());
     }
    }
}
MyAnnotation.java中
package me.test;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyAnnotation

}

摘自 yue7603835的專欄

發佈留言