JDK 5 提供的注解:Target、Inherited和Documented的區(qū)別
JDK 5提供的注解,除了Retention以外,還有另外三個(gè),即Target 、Inherited 和 Documented。
Target 目標(biāo)即Target注解用在哪里, 定義了注解使用的時(shí)機(jī),即注解所適用的程序元素的種類。如果注解類型聲明中不存在 Target 元注解,則聲明的類型可以用在任一程序元素上。如果存在這樣的元注解,則編譯器強(qiáng)制實(shí)施指定的使用限制。
Target 定義如下:
@Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.ANNOTATION_TYPE) public @interface Target { ElementType[] value(); }
可以看到,Target 只有一個(gè)value屬性,類型為枚舉類型ElementType。ElementType 聲明如下:
public enum ElementType { /** 注解可以用在類、接口(包括注解類型)或枚舉聲明 */ TYPE, /** 字段聲明(包括枚舉常量) */ FIELD, /** 方法聲明 */ METHOD, /** 參數(shù)聲明 */ PARAMETER, /** 構(gòu)造方法聲明 */ CONSTRUCTOR, /** 局部變量聲明 */ LOCAL_VARIABLE, /** 注解類型聲明 */ ANNOTATION_TYPE, /** 包聲明 */ PACKAGE }
Documented注解表明制作javadoc時(shí),是否將注解信息加入文檔。如果注解在聲明時(shí)使用了@Documented,則在制作javadoc時(shí)注解信息會(huì)加入javadoc。注解聲明如下:
@Documented @Retention(value=RUNTIME) @Target(value=ANNOTATION_TYPE)//說明該注解只能在聲明注解時(shí)使用,即元注解 public @interface Documented {}
Inherited 注解同樣是元注解,聲明如下:
@Documented @Retention(value=RUNTIME) @Target(value=ANNOTATION_TYPE) public @interface Inherited {}
Inherited 注解表明注解是否會(huì)被子類繼承,缺省情況是不繼承的。當(dāng)注解在聲明時(shí),使用了@Inherited注解,則該注解會(huì)被使用了該注解的類的子類所繼承。
相關(guān)文章
spring?和?idea?建議不要使用?@Autowired注解的原因解析
@Autowired?是Spring框架的注解,而@Resource是JavaEE的注解,這篇文章主要介紹了spring和idea建議不要使用@Autowired注解的相關(guān)知識(shí),需要的朋友可以參考下2023-11-11詳解如何利用jasypt實(shí)現(xiàn)配置文件加密
Jasypt?(Java?Simplified?Encryption)?是一個(gè)?java?庫,它允許開發(fā)人員以最小的成本將基本的加密功能添加到項(xiàng)目中,而無需深入了解密碼學(xué)的工作原理。本文將利用jasypt實(shí)現(xiàn)配置文件加密,感興趣的可以學(xué)習(xí)一下2022-07-07java基礎(chǔ)之接口組成更新的實(shí)現(xiàn)
本文主要介紹了java基礎(chǔ)之接口組成更新的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04IDEA調(diào)試功能使用總結(jié)(step?over/step?into/force?step?into/step?o
本文主要介紹了IDEA調(diào)試功能使用總結(jié)(step?over/step?into/force?step?into/step?out),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07