一、外部工具包
Java中有很多工具包可以用来实现对象属性复制,其中比较常用的有以下几个:
-
Apache Commons BeanUtils:提供了一组简单易用的API,可以实现对象属性的复制、获取、设置等操作。
-
Spring Framework BeanUtils:与Apache Commons BeanUtils类似,提供了一组API,可以实现对象属性的复制、获取、设置等操作。
-
Dozer:一个开源的Java对象映射工具,可以实现不同类型对象之间的属性映射。
-
MapStruct:一个基于注解的Java对象映射工具,可以自动生成类型安全的映射代码。
这些工具包都有详细的文档和示例,可以根据具体需求选择合适的工具包来实现对象属性复制。
二、Java反射机制来实现这个功能
具体步骤如下:
-
获取源对象和目标对象的Class对象。
-
获取源对象的所有属性,遍历每个属性。
-
判断目标对象是否存在与源对象相同名称的属性,如果存在则将源对象的属性值赋值给目标对象的属性。
-
复制完成后返回目标对象。
示例代码如下:
1 public static <T, S> T copyProperties(S source, T target) throws Exception { 2 Class<?> sourceClass = source.getClass(); 3 Class<?> targetClass = target.getClass(); 4 5 Field[] sourceFields = sourceClass.getDeclaredFields(); 6 for (Field sourceField : sourceFields) { 7 String fieldName = sourceField.getName(); 8 Field targetField = null; 9 try { 10 targetField = targetClass.getDeclaredField(fieldName); 11 } catch (NoSuchFieldException e) { 12 // 目标对象不存在该属性,忽略 13 continue; 14 } 15 16 sourceField.setAccessible(true); 17 targetField.setAccessible(true); 18 19 Object value = sourceField.get(source); 20 targetField.set(target, value); 21 } 22 23 return target; 24 }
使用示例:
1 class Source { 2 private String name; 3 private int age; 4 // getter and setter 5 } 6 7 class Target { 8 private String name; 9 private String address; 10 // getter and setter 11 } 12 13 Source source = new Source(); 14 source.setName("Tom"); 15 source.setAge(20); 16 17 Target target = new Target(); 18 target.setAddress("Beijing"); 19 20 copyProperties(source, target); 21 22 System.out.println(target.getName()); // 输出 "Tom" 23 System.out.println(target.getAddress()); // 输出 "Beijing"
标签:java,target,对象,source,String,Java,赋值,属性 From: https://www.cnblogs.com/woju/p/17276027.html