38、Java元註解 @Retention 的用法

@Retention 僅被用於描述註解的生命週期

下面是Retention註解的定義

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
    /**
     * Returns the retention policy.
     * @return the retention policy
     */
    RetentionPolicy value();
}

在它的定義代碼中,僅僅存在一個屬性 RetentionPolicy 

其中 RetentionPolicy 包含三種值,分別爲 1:SOURCE、2:CLASS、3:RUNTIME

public enum RetentionPolicy {
    /**
     * 註解只保留在源文件,當Java文件編譯成class文件的時候,註解被遺棄;
     */
    SOURCE,

    /**
     * 註解被保留到class文件,但jvm加載class文件時候被遺棄,這是默認的生命週期;
     */
    CLASS,

    /**
     * 註解不僅被保存到class文件中,jvm加載class文件之後,仍然存在;
     * 如果要用反射的話,這是必須項
     */
    RUNTIME
}

三者的生命週期長度 SOURCE < CLASS < RUNTIME ,所以前者能作用的地方後者一定也能作用。一般如果需要在運行時去反射獲取註解信息,那隻能用 RUNTIME 註解;

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