天天看點

Java Annotation詳解(二): 反射和Annotation

annotation何時才變得有意義呢? 如果結合反射,取得annotation中設定的全部内容,annotation的意義才會被最大化。

在以下的類中class constructor field method package等類都實作了annotatedelement接口

在接口中有以下重要的方法:

· getannotations(class annotationtype)擷取一個指定的annotation類型

· getannotations() 擷取所有的annotation

· getdeclaredannotations() 擷取聲明過的所有annotation

· isannotationpresent(class<? extends annotation> annotationclass)這個annotation是否出現

通過這些方法,配合反射我們就可以在程式運作時拿到注解的内容了,例子如下:

首先定義一個普通的含有内建注釋的類:

接下來,我們通過反射取出annotation内容要注意,隻有deprecated的annotation的定義範圍是runtime範圍,是以此時通過反射的話,隻能取得一個。

輸出:

@java.lang.deprecated()

以上,我們取得的是内建的annotation,接下來,我們自己定義一個annotation:

我們通過retentionpolicy指定了其值為runtime,在運作時有效。

通過反射取得指定的annotation,因為現在唯一設定的内容就是mydefaultannotationreflect。

輸出: 

key = baidu

value = www.baidu.com

總結:

annotation在實際的開發中,不管如何使用,其最終肯定結合反射機制,也就是說可以通過annotation設定一些内容到方法上去,已完成特定的功能。

繼續閱讀