1.本例使用的是idea
首先需要在idea中安装lombok插件,省略getter和setter方法的书写
在maven项目中加入lombok依赖
org.projectlombok lombok 1.16.10
2.建立两个实体类:
import lombok.Data;/** * @author yangchao * @version V1.0 * @Description: 第一个测试实体类:作为资源实体类 * @date 2018/10/9 */@Datapublic class FirstPerson { private String name; private int age;}
import lombok.Data;import java.math.BigDecimal;/** * @author yangchao * @version V1.0 * @Description: 第一个测试实体类:作为目标实体类 * @date 2018/10/9 */@Datapublic class SecondPerson { private String name; private int age; private BigDecimal cost;}
3.利用反射进行对象之间字段的转换工具:
/** * @author yangchao * @return void * @date 2018/10、9 * @Description: 将srcObj对象字段的值拷贝到destObj字段(前提:两个对象中的字段名相同时) * 其实就是通过反射将值先存在map中,在遍历set进目标对象 */ public static void copyFieldToBean(Object srcObj,Object destObj){ MapsrcMap = new HashMap (); Field[] srcFields = srcObj.getClass().getDeclaredFields(); for (Field srcField : srcFields) { try { srcField.setAccessible(true); srcMap.put(srcField.getName(), srcField.get(srcObj)); //获取属性值 } catch (Exception e) { e.printStackTrace(); } } Field[] destFields = destObj.getClass().getDeclaredFields(); for (Field destField : destFields) { destField.setAccessible(true); if (srcMap.get(destField.getName()) == null) { continue; } try { destField.set(destObj, srcMap.get(destField.getName())); //给属性赋值 } catch (Exception e) { e.printStackTrace(); } } }
4.测试方法和结果:
public static void main(String[] args) { FirstPerson firstPerson = new FirstPerson(); SecondPerson secondPerson = new SecondPerson(); firstPerson.setAge(20); firstPerson.setName("张三"); copyFieldToBean(firstPerson,secondPerson); Field[] fds = secondPerson.getClass().getDeclaredFields(); for (Field fd : fds) { try { fd.setAccessible(true); System.out.println(fd.getName() + "=" + fd.get(secondPerson)); } catch (Exception e) { e.printStackTrace(); } } }
name=张三age=20cost=null