日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java 使用反射处理注解

發(fā)布時間:2025/3/12 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 使用反射处理注解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Java 使用反射處理注解

自定義注解的格式:

[public|final] @interface 注解名//@interface 表明:這是一個自定義注解 {注解元素//注解元素 是無參數(shù)的方法 }// 注解元素的格式: 數(shù)據(jù)類型 注解元素名() [default 默認值]

例子:

//自定義注解: package test;import java.lang.annotation.*; @Target({ElementType.TYPE, ElementType.METHOD}) //注解作用于類和方法的聲明上 @Retention(RetentionPolicy.RUNTIME) //注解在運行時有效 public @interface UseAnno {String value() default "user"; }//使用自定義注解UseAnno package test; @UseAnno//在類上使用注解 public class AnnoC {@UseAnno("注解作用在方法上")//在方法上使用注解public void method() {System.out.println("在方法上使用注解");} }

使用反射處理注解

利用反射可以在運行時動態(tài)獲取類的相關信息,如類的方法、屬性、構造方法。還可以創(chuàng)建對象、調(diào)用方法等。利用反射也可以獲取注解的相關信息。

反射是在運行時獲取相關信息的,要使用反射獲取注解的相關信息,這個注解必須是用@Retention(RetentionPolicy.RUNTIME)聲明的。

java.lang.reflect.AnnotatedElement接口定義了使用反射讀取注解信息的方法:

Annotation getAnnotation(Class annotationType) //若存在該元素指定類型的注解,則返回這些注解,否則返回null。 Annotation[] getAnnotations() //返回此元素上存在的所有注解。包括繼承的 Annotation[] getDeclaredAnnotations() //返回該元素上存在的所有注解,不包括繼承的。/*對于getAnnotations()和getDeclaredAnnotations():如果沒有注釋直接存在于此元素上,則返回長度為零的一個數(shù)組。該方法的調(diào)用者可以隨意修改返回的數(shù)組;這不會對其他調(diào)用者返回的數(shù)組產(chǎn)生任何影響。*/ java.lang.Package.isAnnotationPresent: public boolean isAnnotationPresent(<? extends Annotation> annotationClass)//若指定類型的注解存在于此元素上,則返回true,否則返回false 例: aField.isAnnotationPresent(ApplianceMaker.class) //意思是,判斷aField字段的注解是不是ApplianceMaker 類型 //自定義注解: package test;import java.lang.annotation.*; @Target({ElementType.TYPE, ElementType.METHOD}) //注解作用于類和方法的聲明上 @Retention(RetentionPolicy.RUNTIME) //注解在運行時有效 public @interface UseAnno {String value() default "user"; }//使用自定義注解UseAnno package test; @UseAnno//在類上使用注解 public class AnnoC {@UseAnno("注解作用在方法上")//在方法上使用注解public void method() {System.out.println("在方法上使用注解");} } package test; import java.lang.annotation.Annotation; import java.lang.reflect.Method; //利用反射獲取注解的值 public class ReflectAnno {public static void main(String[] args) {try {Class c = Class.forName("test.AnnoC");//獲取 使用注解的類 AnnoC 的Class對象cClass cUse = Class.forName("test.UseAnno");//獲取 注解類UseAnno 的Class對象cUserAnnotation anno = c.getAnnotation(cUse);//獲取AnnoC類上使用的cUse注解 annoif(anno != null) {UseAnno a = (UseAnno) anno;System.out.println("AnnoC類上的注解: " + a.value());}Method m = c.getDeclaredMethod("method");Annotation an = m.getAnnotation(cUse);//獲取method()方法上使用的cUse注解 anif(an != null) {UseAnno a = (UseAnno) an;System.out.println("method()方法上的注釋: " + a.value());}}catch(Exception e) {e.printStackTrace();}} } /*輸出 AnnoC類上的注解: user method()方法上的注釋: 注解作用在方法上 */ //例子2 package test; import java.lang.annotation.*; import java.lang.reflect.*; @Retention(RetentionPolicy.RUNTIME) // 元注解,運行時保留注解,必須有,否則注解值讀不出 @interface ApplianceMaker // 定義注解 {// 定義注解元素,都有默認值public String type() default "TV";public String id() default "001";public String maker() default "PandaTv";public String address() default "BJ"; }@Retention(RetentionPolicy.RUNTIME) @interface ApplianceSaler // 定義注解 {public String name() default "TM";public String id() default "001";public String address() default "HK"; }@Retention(RetentionPolicy.RUNTIME) @interface AppliancePrice // 定義注解 {// 注解元素只有一個,名為valuepublic int value() default 1200; }class Appliance {// 為域maker 加注解,給部分元素賦值,其余用默認值// 如果注解元素都用默認值,則直接寫@ApplianceMaker@ApplianceMaker(type = "電腦", id = "201")public String maker;@ApplianceSaler(name = "JD", id = "222", address = "WH")public String saler; // 域有注解@AppliancePrice(999) // 也可以寫成"value=999",因為只有一個,此處只寫出值即可public int price; // 域有注解public void setMaker(String m) {maker = m;}public String getMaker() {return maker;}public void setSaler(String saler) {this.saler = saler;}public String getSaler() {return saler;}public void setPrice(int price) {this.price = price;}public int getPrice() {return price;} }public class Test {public static void main(String args[]) {System.out.println(readAnnotation(Appliance.class));}// 讀注解信息private static String readAnnotation(Class aClass) {String maker = "制造商:";String saler = "銷售商:";String price = "價格:";Field fields[] = aClass.getDeclaredFields(); // 獲取Appliance 類的所有字段for (Field aField : fields) // 對每一個字段判斷其注解的類型{// 字段的注解是ApplianceMaker 類型if (aField.isAnnotationPresent(ApplianceMaker.class)) {ApplianceMaker aMaker; // 聲明一個注解變量// 調(diào)用getAnnotation()方法獲得在aField 域上的注解“實例”aMaker = (ApplianceMaker) aField.getAnnotation(ApplianceMaker.class);maker += aMaker.type() + " "; // 獲取type 元素的值,其余與此相同maker += aMaker.id() + " ";maker += aMaker.maker() + " ";maker += aMaker.address() + "\n";}// 字段的注解是ApplianceSaler 類型else if (aField.isAnnotationPresent(ApplianceSaler.class)) {ApplianceSaler aSaler;aSaler = (ApplianceSaler) aField.getAnnotation(ApplianceSaler.class);saler += aSaler.name() + " ";saler += aSaler.id() + " ";saler += aSaler.address() + "\n";}// 字段的注解是AppliancePrice 類型else if (aField.isAnnotationPresent(AppliancePrice.class)) {AppliancePrice thePrice;thePrice = (AppliancePrice) aField.getAnnotation(AppliancePrice.class);price += thePrice.value();}}return maker + saler + price;} } /*輸出: 制造商:電腦 201 PandaTv BJ 銷售商:JD 222 WH 價格:999 */

總結

以上是生活随笔為你收集整理的Java 使用反射处理注解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美v日韩 | xzjzjzjzjzj欧美大片 | 69av一区二区三区 | 欧美一级夜夜爽 | 日日摸日日碰夜夜爽av | 男女爽爽 | 久久久青青 | 久草视频免费在线观看 | 福利视频在线 | 亚州av在线 | 欧美亚洲国产另类 | 日本公妇乱淫免费视频一区三区 | 久艹视频在线 | 国产ts人妖系列高潮 | 日韩av成人在线 | 亚洲乱子伦 | 日本精品视频一区二区三区 | 亚洲视频123 | 97色综合| 337p日本欧洲亚洲大胆张筱雨 | 精品成人免费一区二区在线播放 | 欧美激情视频二区 | 在线中文字幕av | 青草久久久 | 夜夜嗨av一区二区三区免费区 | 男女啪啪免费看 | 国产第一精品视频 | 天天干天天操 | 无码一区二区三区 | 一级特黄毛片 | 国内毛片毛片毛片毛片 | av天堂一区二区三区 | 九草在线 | 欧美国产一区二区三区 | 国产夫妻精品 | 国产区亚洲区 | 69av导航| 日韩欧美一二三 | 蜜臀久久精品久久久用户群体 | 天天干天天透 | 宿舍女女闺蜜调教羞辱 | 五月婷网站 | 亚洲黄色在线免费观看 | 日本a级在线 | 男人都懂的网址 | 婷婷精品视频 | 精品少妇一区二区 | 国产精品96 | 男男啪啪无遮挡 | 国产一区亚洲二区 | 三级影片在线播放 | 亚洲av毛片一区二二区三三区 | 日日噜噜夜夜狠狠久久丁香五月 | 国产成人亚洲精品无码h在线 | 亚洲熟女乱色一区二区三区 | 人人干人人舔 | 国产日韩精品在线 | 国内外成人激情视频 | 人妻少妇精品无码专区久久 | 东京热毛片 | 日本欧美三级 | 久久久a级片 | 久久国产中文 | 久久免费看少妇高潮 | 91av在线免费视频 | 夜夜草导航 | 亚洲国产精品18久久久久久 | 国产精品久久九九 | 丝袜美腿亚洲一区二区图片 | 日本精品人妻无码免费大全 | www.亚洲天堂.com| h片在线观看视频 | 久久黄色大片 | 国产视频一二三四区 | 国产人妻一区二区三区四区五区六 | 亚洲天天av | 亚洲精品在线电影 | 在线播放www| 午夜看片在线观看 | 欧美日韩国产精品 | 亚洲午夜无码久久 | 国产精品久久二区 | 已满十八岁免费观看全集动漫 | 青青99| 中文国产| 毛片在线免费 | 亚洲午夜久久久久久久久红桃 | 夜夜爱av| 日韩精品导航 | 2024国产精品 | 亚洲精品a | 日韩一区二区三区免费视频 | 精品无码久久久久久久久果冻 | 久久公开视频 | 黄色小视频免费网站 | 精品乱码一区内射人妻无码 | 在线日韩三级 | 日韩欧美中文字幕一区二区三区 | 五月天视频网 |