註解

    註解,就是在類的某一個部分打上一個標記,那麼註釋類型的註釋要保留多久呢?如果註釋類型聲明中不存在 Retention 註釋,則保留策略默認爲 RetentionPolicy.CLASS只有元註釋類型直接用於註釋時,Target 元註釋纔有效。如果元註釋類型用作另一種註釋類型的成員,則無效。註解保留時間:

    RetentionPolicy.CLASS:編譯器將把註釋記錄在類文件中,但在運行時 VM 不需要保留註釋。

    RetentionPolicy.RUNTIME編譯器將把註釋記錄在類文件中,在運行時 VM 將保留註釋,因此可以反射性地讀取。

    RetentionPolicy.SOURCE:編譯器要丟棄的註釋。

 

下面定義一個註解,舉一個例:

   @Retention(value=RUNTIME)

   public @interface Test{

        String value(); 

   }

 

  上面介紹了註解保存多久,如何定義,那註解可以使用在哪些地方呢?註解放在哪個地方用@Target元註解定義。

   @Target({ElementType.FIELD, ElementType.METHOD, ElementType.FIELD})
    public @interface Bogus {
        ...
    }

這樣定義一個註解到底放在哪個地方,如果想讓註解放在多個地方,在()加一個{}在大括號裏面一一寫出可放的位置,用逗號隔開。

    可放的位置:

     ElementType.ANNOTATION_TYPE:註釋類型聲明

     ElementType.CONSTRUCTOR :構造方法聲明

     ElementType.FIELD :字段聲明(包括枚舉常量)

     ElementType.LOCAL_VARIABLE :局部變量聲明

     ElementType.METHOD :方法聲明

     ElementType.PACKAGE :包聲明

     ElementType.PARAMETER: 參數聲明

     ElementType.TYPE :類、接口(包括註釋類型)或枚舉聲明

 

註解放在這些地方什麼時候起作用呢?其實註解並沒有什麼作用,它只是起到一個標記的作用。只有註解處理類來處理它,這裏就需要使用一些反射技術了,在一個類中,我們得到了其它的類的對象,我們就可以能過反射來得到它身上是否有這個標記。然後再針對這個標記的值進行處理。

    註解的屬性:

        註解的屬性的定義,跟在接口裏面定義方法基本上相同,唯一不同的是註解裏面的屬性可以定義缺省值。一個屬性定義後,如果我們想給它一個缺省值,就可以直接在後面寫上缺省值,這樣,在用這個註解的時候就可以不用給這個屬性賦值,它就會使用缺省值。有一個特殊的屬性,叫value這個可以定義後,使用的時候可以直接寫值,直接寫值,就相於是賦值給這個屬性的。

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