天天看點

java自定義注解類

  今天閱讀帆哥代碼的時候,看到了之前沒有見過的新東西, 比如java自定義注解類,如何擷取注解,如何反射内部類,this$0是什麼意思? 于是乎,學習并整理了一下。

  感覺等價于

  自定義注解類規則

  @interface實際上是繼承了java.lang.annotation.Annotation,是以定義annotation時不能繼承其他annotation或interface. java.lang.annotation.Retention告訴編譯器如何對待 Annotation,使用Retention時,需要提供java.lang.annotation.RetentionPolicy的枚舉值.

    java.lang.annotation.Target告訴編譯器Annotation使用在哪些地方,使用需要指定java.lang.annotation.ElementType的枚舉值.

    java.lang.annotation.Documented用于指定該Annotation是否可以寫入javadoc中. 

    java.lang.annotation.Inherited用于指定該Annotation用于父類時是否能夠被子類繼承. 

  示例

   java.lang.reflect.AnnotatedElement接口提供了四個方法來通路Annotation

   來自:http://blog.csdn.net/foamflower/article/details/5946451

   Class、Constructor、Field、Method、Package等都實作了該接口,可以通過這些方法通路Annotation資訊,前提是要通路的Annotation指定Retention為RUNTIME. 

     Java内置的annotation有Override Deprecated SuppressWarnings. 

     Override隻用于方法,它指明注釋的方法重寫父類的方法,如果不是,則編譯器報錯. 

     Deprecated指明該方法不建議使用.

     SuppressWarnings告訴編譯器:我知道我的代碼沒問題.

  說一個場景:當我們拿到了一個内部類的對象Inner,但是又想擷取其對應的外部類Outer,那麼就可以通過this$0來擷取。this$0就是内部類所自動保留的一個指向所在外部類的引用。 

  由此可見,内部類的無參構造器在通過反射機制擷取時,要指定其父類參數才可以獲得,否則将報如下異常: