整理一下,要不老忘顶籽。。银觅。
元注解的作用就是負(fù)責(zé)注解其他注解礼饱。Java5.0定義了4個(gè)標(biāo)準(zhǔn)的meta-annotation類型,它們被用來提供對(duì)其它 annotation類型作說明究驴。Java5.0定義的元注解有以下幾種:
- @Target
- @Retention
- @Documented
- @Inherited
@Target
用于描述注解的范圍镊绪,即注解在哪用。它說明了Annotation所修飾的對(duì)象范圍洒忧,取值類型(ElementType)有以下幾種:
public enum ElementType {
/** 類蝴韭、接口(包括注解類型)或枚舉聲明*/
TYPE,
/** 字段聲明(類屬性)(包括枚舉常量) */
FIELD,
/** 方法聲明 */
METHOD,
/** 形式參數(shù)聲明(方法中的param) */
PARAMETER,
/** 構(gòu)造函數(shù)聲明 */
CONSTRUCTOR,
/** 方法局部變量聲明 */
LOCAL_VARIABLE,
/** 注解類型聲明 */
ANNOTATION_TYPE,
/** 包裝聲明 */
PACKAGE,
/**
* 類型參數(shù)聲明
*
* @since 1.8
*/
TYPE_PARAMETER,
/**
* 使用類型(可以在任意地方使用)
*
* @since 1.8
*/
TYPE_USE
}
-
其中 PACKAGE 類型比較特別,如下圖可以利用開發(fā)工具創(chuàng)建 package-info.java 樣式的文件熙侍,然后可以將注解加在package關(guān)鍵字上榄鉴。
image.png TYPE_PARAMETER 類型一般放在方法范型上
public <@Anno T> void test() {
}
@Retention
用于描述注解的生命周期履磨,表示需要在什么級(jí)別保存該注解,即保留的時(shí)間長(zhǎng)短庆尘。取值類型(RetentionPolicy)有以下幾種:
- SOURCE : 在源文件中有效(即源文件保留)
- CLASS : 在class文件中有效(即class保留)
- RUNTIME : 在運(yùn)行時(shí)有效(即運(yùn)行時(shí)保留)
@Documented
用于描述其它類型的annotation應(yīng)該被作為被標(biāo)注的程序成員的公共API剃诅,因此可以被例如javadoc此類的工具文檔化。它是一個(gè)標(biāo)記注解驶忌,沒有成員矛辕。
@Inherited
作用:如果一個(gè)類用上了@Inherited修飾的注解,那么其子類也會(huì)繼承這個(gè)注解位岔,子類也可以通過反射獲取到這個(gè)注解