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設定一些内容到方法上去,已完成特定的功能。