javaee论坛

普通会员

225648

帖子

344

回复

358

积分

楼主
发表于 2019-11-04 09:25:58 | 查看: 64 | 回复: 1

(1)定义一个注解

packagecom.zyq.annotation;importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;/***通用配置注解*@authorzyq*@date2019-04-22*/@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)public@interfaceDesc{Stringvalue();Stringremark()default"";}

(2)定义一个类,类的属性上使用该注解

packagecom.zyq.consts;importcom.zyq.annotation.Desc;/***用户状态*@authorzyq*@date2019-04-22*/publicclassUserStatus{@Desc(value="正常")publicstaticintNORMAL=1;@Desc(value="非正常",remark="该状态用户不能登录")publicstaticintABNORMAL=2;}

(3)定义一个与注解属性对应的类

packagecom.zyq.vo;publicclassFixedVo{publicintkey;publicStringvalue;publicStringremark;publicintgetKey(){returnkey;}publicStringgetValue(){returnvalue;}publicStringgetRemark(){returnremark;}publicvoidsetKey(intkey){this.key=key;}publicvoidsetValue(Stringvalue){this.value=value;}publicvoidsetRemark(Stringremark){this.remark=remark;}@OverridepublicStringtoString(){return"FixedVo[key="+key+",value="+value+",remark="+remark+"]";}}

(4)创建一个注解工具类,提供解析注解的方法

packagecom.zyq.tools;importjava.lang.reflect.Field;importjava.util.Collections;importjava.util.LinkedList;importjava.util.List;importcom.zyq.annotation.Desc;importcom.zyq.vo.FixedVo;publicclassAnnotationTool{/***获取打了Desc注解的字典属性列表*@paramt类*@return字典属性列表*/publicstatic<T>List<FixedVo>getFixedVoList(Class<T>c){if(c==null){returnCollections.emptyList();}try{Tcls=c.newInstance();Field[]fields=c.getDeclaredFields();List<FixedVo>fixedVoList=newLinkedList<FixedVo>();for(Fieldfield:fields){Descdesc=field.getAnnotation(Desc.class);if(desc!=null){FixedVovo=newFixedVo();vo.setKey(field.getInt(cls));vo.setValue(desc.value());vo.setRemark(desc.remark());fixedVoList.add(vo);}}returnfixedVoList;}catch(Exceptione){e.printStackTrace();}returnCollections.emptyList();}}

(4)测试类代码

packagecom.zyq.tools.test;importjava.util.List;importorg.junit.Test;importcom.zyq.consts.UserStatus;importcom.zyq.tools.AnnotationTool;importcom.zyq.vo.FixedVo;publicclassAnnotationToolTest{@TestpublicvoidgetFixedVoListTest(){List<FixedVo>voList=AnnotationTool.getFixedVoList(UserStatus.class);for(FixedVovo:voList){System.out.println(vo.toString());}}}

(4)测试结果:

FixedVo[key=1,value=正常,remark=]FixedVo[key=2,value=非正常,remark=该状态用户不能登录]

 


普通会员

0

帖子

298

回复

306

积分
沙发
发表于 2024-04-26 08:35:41

好好好

您需要登录后才可以回帖 登录 | 立即注册

触屏版| 电脑版

技术支持 历史网 V2.0 © 2016-2017