hello,大家好,今天给大家分析一个解决Beanutils.copyproperties实体类对象名不一致的解决方法,一般我们在两个对象拷贝的问题上,我个人用的比较多的就是Beanutils.copyproperties,字段名如果不一致的话就去实体类中使用重载,把当前实体类的对象赋值给另外一个对象,也有用到set(),当然这些也都能解决Beanutils.copyproperties实体类属性不一致的问题,不过今天要给大家分享的是,不用set()和实体类的重构,使用类的反射机制去完成!
话不多说直接开始:
我是选择重写了一个实体类copy工具类首先要获取传过来的两个对象的类( getClass() 方法),
通过获取类再去获取对象中的属性
( getDeclaredFields() 方法)
( fieId.setAccessible(true) 方法是false时不允许通过反射访问该字段,所以要设置成true用一个HashMap去接受),
第二个类也是一样的操作
都说了是解决实体类属性不一致的方法啦,所以实体类要有不一样的字段,那么我们应该怎么让系统知道这个字段和那个字段是要干一件事情呢?
就比如,欸我今天不去钓鱼,要去当舔🐕,就是玩,朋友他只能去当舔🐕,我们的目的都是当舔🐕,但是出发点都是不同,所以要让系统知道我们要去干嘛 这时候要用到一个注解(FieldMap )让系统清楚我们要去干同一件事情
这是FieldMap类
既然我们已经让系统知道了谁要去干嘛了,当然要去获取他了,这时候就要用到fleId.getAnnotation()方法了,获取注解上的Name的值,然后拿Name的值去做判断,所以用到了getType()去获取类型去做判断
这样就解决了Beanutils.copyproperties实体类对象不一致就copy不进去的问题了,感谢支持!溜了溜了