博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java注解开发与应用案例
阅读量:5741 次
发布时间:2019-06-18

本文共 3324 字,大约阅读时间需要 11 分钟。

Java注解开发与应用案例

Annotation(注解)是JDK5.0及以后版本引入的,可以对包、类、属性、方法的描述,给被述对象打上标签,被打上标签后的类、属性、方法将被赋予特殊的“功能”;打个比喻,一个人如果学会飞,那这个人就是超人,所以如果给“人”这个对象打上了“会飞”的标签,那么这个人便成为“超人”。注解一般被框架解析和执行,新建立注解后,必须要有对应的框架解析和执行才有意义。下面举一个自定义注解例子:

 

自定义注解

  它类似于新创建一个接口类文件,但为了区分,我们需要将它声明为@interface,下面,我们用代码来演示。

package com.annotation.test;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)public @interface FruitColor {    enum Color{RED,YELLOW,WHITE}        Color fruitColor() default Color.RED;    }
package com.annotation.test;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)public @interface FruitName {    String value() default "";    }
package com.annotation.test;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)public @interface FruitProvider {    int id() default 0;        String user() default "";        String address() default "";    }

以上是定義的蘋果的相關信息,下面,我們開始使用上面定義的註解來進行具體的實現:

package com.annotation.test;import com.annotation.test.FruitColor.Color;public class Apple {    @FruitName(value="FuShi Apple")    private String fruitName;        @FruitColor(fruitColor=Color.RED)    private String fruitColor;        @FruitProvider(id=1,user="Tom",address="China")    private FruitProvider provider;}

上面的Apple類是使用我們自己定義的註解來對類成員進行修飾。接下來,我們獲取我們的註釋信息:

1 package com.annotation.test; 2  3 import java.lang.reflect.Field; 4  5 public class Test { 6  7      8     public static void getFruitInfo(String clas){ 9         try {10             Class
cls = Class.forName(clas);11 Field[] fields = cls.getDeclaredFields();12 13 for (Field field : fields) {14 if(field.isAnnotationPresent(FruitName.class)==true){15 FruitName name = field.getAnnotation(FruitName.class);16 System.out.println("Fruit Name:"+name.value());17 }18 if(field.isAnnotationPresent(FruitColor.class)){19 FruitColor color = field.getAnnotation(FruitColor.class);20 System.out.println("Fruit Color:"+color.fruitColor());21 }22 if(field.isAnnotationPresent(FruitProvider.class)){23 FruitProvider Provider = field.getAnnotation(FruitProvider.class);24 System.out.println("Fruit FruitProvider: ProviderID:"+Provider.id()+" Provider:"+Provider.user() +" ProviderAddress:"+Provider.address());25 }26 }27 28 29 } catch (ClassNotFoundException e) {30 e.printStackTrace();31 }32 }33 34 public static void main(String[] args) {35 getFruitInfo("com.annotation.test.Apple");36 }37 38 }

輸出結果爲:

Fruit Name:FuShi AppleFruit Color:REDFruit FruitProvider: ProviderID:1 Provider:Tom ProviderAddress:China

 

转载于:https://www.cnblogs.com/liuys635/p/10238569.html

你可能感兴趣的文章
pychecker:分析你的python代码
查看>>
我的友情链接
查看>>
DNS显性+隐性URL转发原理
查看>>
我的友情链接
查看>>
网易有道 IP地址、手机号码归属地和身份证 查询接口API
查看>>
鼠标停留在GridView某一行时行的颜色改变
查看>>
系列3:WAS Liberty Profile hello mysql jdbc
查看>>
基础知识:python模块的导入
查看>>
Android MVC之我的实现
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
关于批处理-1
查看>>
Tomcat部署Web应用方法总结
查看>>
Python3 django2.0 字段加密 解密 AES
查看>>
CCNA实验之:网络地址转换(NAT)实验
查看>>
计算机网络原理笔记-停止等待协议
查看>>
确定当前记录和下一条记录之间相差的天数
查看>>
sql语句返回主键SCOPE_IDENTITY()
查看>>
机器学习开源项目精选TOP30
查看>>
iOS开发-邮件发送
查看>>