Java 注解】自定義注解 ( 元注解 )

      網(wǎng)友投稿 885 2025-03-31

      文章目錄

      一、元注解

      二、常用的元注解類型

      三、@Target 元注解

      四、@Retention 元注解

      五、@Documented 元注解

      六、@Documented 元注解

      一、元注解

      元注解 是 描述

      注解

      注解 ;

      以 Override 注解為例 , 分析下該注解的 元注解 含義 :

      @Target(ElementType.METHOD) @Retention(RetentionPolicy.SOURCE) public @interface Override { }

      1

      2

      3

      4

      @Target 注解用于說明該注解作用位置 , ElementType.METHOD 表示該注解用于標(biāo)注 方法 ; 注解的作用位置 :

      包 ,

      類 ,

      成員變量 ,

      方法 ,

      方法參數(shù) ,

      局部變量 ,

      6 6 6 個作用位置 ;

      @Retention 注解用于說明該注解需要保留到什么階段 , RetentionPolicy.SOURCE 表示保留到源碼中 , SOURCE 階段 ( 源代碼階段 ) ; Java 代碼的三個階段分別是 :

      源代碼階段 ,

      類對象階段 ,

      運行時階段 ;

      元注解的個數(shù)是有限的 , JDK 已經(jīng)定義好 ;

      二、常用的元注解類型

      @Target : 描述 注解 的作用位置 ,

      包 ,

      類 ,

      成員變量 ,

      方法 ,

      方法參數(shù) ,

      局部變量 ,

      6 6 6 個作用位置 ;

      @Retention : 描述 注解 被保留的階段 ,

      源代碼階段 ,

      類對象階段 ,

      運行時階段 ;

      @Documented : 描述 注解

      是否需要被抽取到文檔中

      , 在使用 javadoc 命令生成文檔時 , 該 注解 是否生成到文檔中 ;

      @Inherited : 描述 注解

      是否被子類繼承

      , 如果添加了該注解 , 則子類會自動繼承父類的注解 ;

      三、@Target 元注解

      查看 Target 注解的源碼 , 該注解只有 1 1 1 個注解屬性 , 且屬性值是 value , 因此在給 注解屬性 賦值時 , 可以省略 注解屬性名稱 ;

      @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.ANNOTATION_TYPE) public @interface Target { ElementType[] value(); }

      1

      2

      3

      4

      5

      6

      value 注解屬性 的類型是 ElementType[] 數(shù)組類型 , 代表 注解 作用的位置 ; 可以設(shè)置的位置參考 ElementType 枚舉類 ;

      ElementType.TYPE : 注解作用于類上 ;

      ElementType.FIELD: 注解作用于字段上 ;

      ElementType.METHOD : 注解作用于方法上 ;

      public enum ElementType { /** 類 , 接口 (包括注解類型) , 枚舉類型 聲明 */ TYPE, /** 字段 (包括枚舉常量) */ FIELD, /** 方法聲明 */ METHOD, /** 普通參數(shù)聲明 */ PARAMETER, /** 構(gòu)造函數(shù)聲明 */ CONSTRUCTOR, /** 局部變量聲明 */ LOCAL_VARIABLE, /** 注解類型聲明 */ ANNOTATION_TYPE, /** 包聲明 */ PACKAGE, /** * 類型參數(shù)聲明 * * @since 1.8 */ TYPE_PARAMETER, /** * 使用一個類型 * * @since 1.8 */ TYPE_USE }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      @Target 使用示例 : 使用 @Target(ElementType.TYPE) 設(shè)置注解作用位置必須是 類 / 接口 / 枚舉 , 將 @Annotation 標(biāo)注在其它位置會報錯 ;

      @Target(ElementType.TYPE) public @interface Annotation { }

      1

      2

      3

      作用域構(gòu)造函數(shù)上 , 報如下錯誤 ;

      被 @Target(ElementType.TYPE) 元注解修飾的 Annotation 注解 , 只能在 類 上進行標(biāo)注 ;

      @Annotation( stringValue = "tom", enumValue = Number.ONE, annotationValue = @Annotation2, stringArrayValue = {"tom", "jerry"}) public class Student { }

      1

      2

      3

      4

      5

      6

      7

      Target 注解中 , ElementType[] value() 注解屬性的類型是數(shù)組類型 , 說明可以設(shè)置多個 注解 標(biāo)注 位置 ;

      如 : 使用如下

      @Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})

      1

      元注解修飾 Annotation 注解 , 則可以同時在 類 , 字段 和 方法上使用該 Annotation 注解 ;

      四、@Retention 元注解

      @Retention 注解用于說明該注解需要保留到什么階段 ;

      Java 代碼的三個階段分別是 :

      源代碼階段 ,

      類對象階段 ,

      運行時階段 ;

      查看 Retention 源碼 ,

      @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.ANNOTATION_TYPE) public @interface Retention { RetentionPolicy value(); }

      1

      2

      3

      4

      5

      6

      Retention 注解的 注解屬性 RetentionPolicy value() , 其類型是 RetentionPolicy 枚舉類型 , 三個枚舉值 , 分別對應(yīng) Java 代碼三大階段

      源代碼階段 ,

      類對象階段 ,

      運行時階段 ;

      public enum RetentionPolicy { /** * 源代碼階段 * 編譯器丟棄該注解. */ SOURCE, /** * 類對象階段 * 注解會被保存到字節(jié)碼文件中, 不會被 JVM 讀取到. */ CLASS, /** * 運行時階段 * 注解會被保存到字節(jié)碼文件中, 并會被 JVM 讀取到. * * @see java.lang.reflect.AnnotatedElement */ RUNTIME }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      一般情況下 , 開發(fā)則自定義注解 , 都是在運行時進行一些代碼分析 , 設(shè)置 RetentionPolicy.RUNTIME 注解屬性 ;

      @Retention(RetentionPolicy.RUNTIME)

      1

      五、@Documented 元注解

      如果添加了該注解 , 表示當(dāng)前注解會被抽取到 Java API 文檔中 ;

      @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.ANNOTATION_TYPE) public @interface Documented { }

      1

      2

      3

      4

      5

      使用 javadoc Student.java 命令 , 生成 Java 文檔 ; 如果使用 @Documented 注解修飾 Annotation 注解 , 則導(dǎo)出的文檔如下 , 在類和方法的上面會顯示相應(yīng)注解 ;

      如果不使用 @Documented 注解 , 則生成的文檔中沒有 Annotation 注解 ;

      六、@Documented 元注解

      @Inherited : 描述 注解

      是否被子類繼承

      , 如果添加了該注解 , 則子類會自動繼承父類的注解 ;

      使用

      @Inherited

      元注解 標(biāo)注

      Annotation 注解 ;

      使用 Annotation 注解

      標(biāo)注父類 Person ;

      子類 Student 繼承 Person 類

      【Java 注解】自定義注解 ( 元注解 )

      ,

      子類中不添加注解 ,

      那么父類 Person 中的注解自動添加給子類 Student ;

      Java

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:什么是數(shù)字化客戶體驗?
      下一篇:在表格如何查找自己要找的東西(在表格中如何查找出自己想要的)
      相關(guān)文章
      久久精品亚洲福利| 亚洲欧洲日本在线观看| 亚洲国产精品无码久久久不卡 | 亚洲精品乱码久久久久久V| 亚洲精品国产精品乱码不99 | 综合亚洲伊人午夜网| 亚洲а∨天堂久久精品| 亚洲国产精品美女| 亚洲国产精品一区二区久久| 亚洲人成中文字幕在线观看| 亚洲乱亚洲乱少妇无码| 亚洲精品无AMM毛片| 久久精品国产亚洲AV蜜臀色欲| 亚洲精品成人网站在线观看| 国产亚洲日韩在线a不卡| 亚洲成在人线aⅴ免费毛片 | 色窝窝亚洲AV网在线观看| 亚洲自国产拍揄拍| 亚洲一卡2卡3卡4卡乱码 在线| 亚洲AV无码专区在线亚| 天堂亚洲国产中文在线| 国产精品亚洲天堂| 亚洲一本综合久久| 久久久久亚洲爆乳少妇无| 亚洲精品~无码抽插| 国产精品亚洲专区在线观看| 日韩精品亚洲aⅴ在线影院| 亚洲av无码成人精品国产| 亚洲人成网站影音先锋播放| 亚洲一级特黄大片在线观看| 亚洲人成777在线播放| 国产亚洲精品美女久久久| 亚洲精品国产V片在线观看| 亚洲愉拍99热成人精品热久久 | 亚洲国产视频一区| MM131亚洲国产美女久久| 久久久久噜噜噜亚洲熟女综合 | 亚洲午夜精品在线| 亚洲综合激情另类小说区| 亚洲视频一区二区三区| 亚洲高清一区二区三区电影|