Java的註解是Java中非常好用的一個功能點。基本所有的java框架都會用到。在我們日常的工作中,如果善於使用自定義註解,講給我們節省下大量的時間。
代碼示例:
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Documented
@Target(ElementType.METHOD)
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface MyDemo{
String author() default 'yunsheng';
}
對自定義註解進行註解的稱為元註解。常用的元註解有四類:
@Documented :表明此註解會被javadoc等類似工具識別,並保留在API文檔中。
@Target:聲明這個註解可使用的範圍。可以打開ElementType看下,分別是:1)類,接口,註解,enum; 2)屬性域;3)方法;4)參數;5)構造函數;6)局部變量;7)註解類型;8)包
@Inherited:繼承。是說如果你在父類上使用了被@Inherited註解的註解A。那麼該類的子類也會繼承該註解A。
@Retention:註解的存在範圍。
有三個範圍:
RetentionPolicy.SOURCE 只存在源碼級別,被編譯器拋棄(@Override就是此類);
RetentionPolicy.CLASS 會被編譯器保留在編譯後的類文件中,但是會被虛擬機丟棄;
RetentionPolicy.RUNTIME 保留在運行時,可以被反射讀取。這個註解還是比較重要的,我們一般是會使用RUNTIME級別,因為我們需要通過反射讀取到這個註解。
使用:
使用起來其實很簡單,就是通過反射拿到註解信息。
如:Method的幾個方法:
isAnnotationPresent(xx.xx.class):方法判斷是否使用了xx註解
getAnnotation(xx.class):獲取具體的註解對象實例
getDeclaredAnnotations():獲取所有註解,注意反射方法中Declared都是獲取自身的,不包括繼承來的。
getAnnotations():獲取包括繼承來的註解。這裡就要看父類的註解是否是可繼承的了。
閱讀更多 IT技術圈 的文章