BeanUtils.copyProperties不同属性名之间如何拷贝
时间: 2023-07-05 16:32:33 浏览: 102
使用反射+缓存+委托实现一个不同对象之间同名同类型属性值的快速拷贝的小程序
5星 · 资源好评率100%
如果源对象和目标对象的属性名称不同,并且属性类型也不同,可以使用BeanUtils.copyProperties(source, target, converter)方法,其中converter参数是一个自定义的属性转换器(Converter),用于实现不同属性名之间的属性拷贝。具体实现方法如下:
1. 定义一个源对象和目标对象,属性名称和类型不同:
```java
public class Source {
private String name;
private int age;
// getter和setter方法省略
}
public class Target {
private String username;
private Integer userAge;
// getter和setter方法省略
}
```
2. 定义一个自定义的属性转换器:
```java
public class CustomConverter implements Converter {
@Override
public Object convert(Class clazz, Object value) {
if (clazz == String.class && value instanceof Integer) {
return String.valueOf(value);
} else if (clazz == Integer.class && value instanceof String) {
return Integer.parseInt((String) value);
}
return value;
}
}
```
上述自定义的属性转换器实现了将Integer类型转换成String类型,以及将String类型转换成Integer类型的功能。
3. 在使用BeanUtils.copyProperties()时,指定converter参数:
```java
public static void main(String[] args) {
Source source = new Source();
source.setName("Tom");
source.setAge(18);
Target target = new Target();
BeanUtils.copyProperties(source, target, new CustomConverter());
System.out.println(target.getUsername()); // Tom
System.out.println(target.getUserAge()); // 18
}
```
在上述代码中,我们通过自定义的属性转换器实现了将源对象的"name"属性拷贝到目标对象的"username"属性中,并且将源对象的"age"属性拷贝到目标对象的"userAge"属性中。
阅读全文