JDK 5提供的註解,除了Retention以外,還有另外三個,即Target 、Inherited 和Documented。
Target 目標即Target註解用在哪裡, 定義了註解使用的時機,即註解所適用的程序元素的種類。如果註解類型聲明中不存在Target 元註解,則聲明的類型可以用在任一程序元素上。如果存在這樣的元註解,則編譯器強制實施指定的使用限制。
Target 定義如下:
@Documented@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.ANNOTATION_TYPE)public @interface Target { ElementType[] value();}可以看到,Target 只有一個value屬性,類型為枚舉類型ElementType。 ElementType 聲明如下:
public enum ElementType { /** 註解可以用在類、接口(包括註解類型)或枚舉聲明*/ TYPE, /** 字段聲明(包括枚舉常量) */ FIELD, /** 方法聲明*/ METHOD, /** 參數聲明*/ PARAMETER, /** 構造方法聲明*/ CONSTRUCTOR, /** 局部變量聲明*/ LOCAL_VARIABLE, /** 註解類型聲明*/ ANNOTATION_TYPE, /** 包聲明*/ PACKAGE}Documented註解表明製作javadoc時,是否將註解信息加入文檔。如果註解在聲明時使用了@Documented,則在製作javadoc時註解信息會加入javadoc。註解聲明如下:
@Documented@Retention(value=RUNTIME)@Target(value=ANNOTATION_TYPE)//說明該註解只能在聲明註解時使用,即元註解public @interface Documented {}Inherited 註解同樣是元註解,聲明如下:
@Documented@Retention(value=RUNTIME)@Target(value=ANNOTATION_TYPE)public @interface Inherited {}Inherited 註解表明註解是否會被子類繼承,缺省情況是不繼承的。當註解在聲明時,使用了@Inherited註解,則該註解會被使用了該註解的類的子類所繼承。