Java反射机制Reflection在项目中的应用
反射机制Reflection 简单的理解就是对class类的运用,在项目当中,适用于很多独特的场景,比如我们项目中的需求,1 我这边有两条数据,我主要知道两条数据哪些字段做了变更;2 我们跟别的webServer做联调,适配推送过去的字段等等。
1 几个注意核心类和方法
- Field : 提供有关类或接口的单个字段的信息和动态访问。
getName() :返回此Field对象表示的字段的名称.
getType(): 返回一个Class对象,该对象标识此Field对象表示的字段的声明类型 。- getDeclaredField(String name) : 返回一个Field对象。
- getDeclaredFields() :返回一个Field数组
- 当然用的的不止这些,具体看业务和Class 文档
2 生成公共类
public class Conversion {
//将model中与entity中类型和名称相同的属性值赋值给对应的entity的属性,并返回entity
public static T2 TypeConversion(T1 model, T2 entity) {
List
3 项目实践:
- 3.1需求1 :我这边有两条数据,我想知道知道两条数据哪些字段做了变更【通过遍历,查出字段name相同的字段的value是否相同,记录下来,返回到List
> 集合中,接下来你就可以拿着这个结合做各种业务处理了】 // 这边比较数据的值 public List
> getCompareData(HecYbMedCodeSyncEntity entityHis, HecYbMedCodeSyncEntity entityNow) { List > lists = new ArrayList<>(); List > modelList = Conversion.getFiledInfo(entityHis); List > entityList = Conversion.getFiledInfo(entityNow); modelList.forEach(mapHis -> { entityList.forEach(mapNow -> { Map map = new HashMap<>(); //这边需要把获取得到的字段名 跟 医保中心的字段名做个匹配,把我们这边的字段名转成他们那边的字段名 if ( mapHis.get("name").toString().equals(mapNow.get("name").toString())) {//判断名字相同 if (!(mapHis.get("value").toString().equals(mapNow.get("value").toString())) ) {//判断值不相同 且 反射实体不为空 map.put("bgzdbm", fieldMappedEnum.getSourceFieldName()); //变更字段编码 map.put("bgzdmc", fieldMappedEnum.getDesc()); //变更字段名称 map.put("bgqz00", mapHis.get("value").toString()); //变更前值 map.put("bghz00", mapNow.get("value").toString()); //变更后值 map.put("bgsj00", DateUtil.limitDay(entityNow.getSyncTime())); //变更时间 lists.add(map); } } }); }); - 3.2 我们跟别的webServer做联调,我需要把我的数据库字段的名称改成webServer上的值。
我的设计思路是,设计一个枚举,把我数据库的字段A,和webServer接口上的字段对应上B,这样给B赋值的时候就可以通过枚举获取得到A,并且通过A就可以获取到A的值,这样就绕过了人工的给B赋值的繁琐操作。
成都一家集口碑和实力的网站建设服务商,拥有专业的企业建站团队和靠谱的建站技术,十年企业及个人网站建设经验 ,为成都上千余家客户提供网页设计制作,网站开发,企业网站制作建设等服务,包括成都营销型网站建设,品牌网站设计,同时也为不同行业的客户提供成都网站制作、网站设计的服务,包括成都电商型网站制作建设,装修行业网站制作建设,传统机械行业网站建设,传统农业行业网站制作建设。在成都做网站,选网站制作建设服务商就选创新互联。
调用如下:
FieldMappedEnum fieldMappedEnum = FieldMappedEnum.findSourceFieldByTarget(mapHis.get("name").toString());
map.put("bgzdbm", fieldMappedEnum.getSourceFieldName()); //变更字段编码
map.put("bgzdmc", fieldMappedEnum.getDesc()); //变更字段名称
....
本文题目:Java反射机制Reflection在项目中的应用
网页URL:http://ybzwz.com/article/jjgopc.html