注解是java 5的一個新特性。注解是插入你代碼中的一種注釋或者說是一種中繼資料(meta data)。
這些注解資訊可以在編譯期使用預編譯工具進行處理(pre-compiler tools),也可以在運作期使用java反射機制進行處理。下面是一個類注解的例子:
在theclass類定義的上面有一個@myannotation的注解。注解的定義與接口的定義相似,下面是myannotation注解的定義:
在 <code>interface</code> 前面的@符号表名這是一個注解,一旦你定義了一個注解之後你就可以将其應用到你的代碼中,就像之前我們的那個例子那樣。
在注解定義中的兩個訓示 <code>@retention(retentionpolicy.runtime)</code> 和 <code>@target(elementtype.type)</code> ,說明了這個注解該如何使用。
<code>@retention(retentionpolicy.runtime)</code> 表示這個注解可以在運作期通過反射通路。如果你沒有在注解定義的時候使用這個訓示那麼這個注解的資訊不會保留到運作期,這樣反射就無法擷取它的資訊。
<code>@target(elementtype.type)</code> 表示這個注解隻能用在類型上面(比如類跟接口)。你同樣可以把type改為field或者method,或者你可以不用這個訓示,這樣的話你的注解在類,方法和變量上就都可以使用了。
你可以在運作期通路類,方法或者變量的注解資訊,下是一個通路類注解的例子:
你還可以像下面這樣指定通路一個類的注解:
下面是一個方法注解的例子:
你可以像這樣通路方法注解:
你可以像這樣通路指定的方法注解:
方法參數也可以添加注解,就像下面這樣:
你可以通過method對象來通路方法參數注解:
需要注意的是method.getparameterannotations()方法傳回一個注解類型的二維數組,每一個方法的參數包含一個注解數組。
下面是一個變量注解的例子:
你可以像這樣來通路變量的注解:
你可以像這樣通路指定的變量注解: