java两个对象之间能赋值吗_如何使用BeanUtils.copyProperties进行对象之间的属性赋值...

1、使用org.springframework.beans.BeanUtils.copyProperties方法进行对象之间属性的赋值,避免通过get、set方法一个一个属性的赋值

/**

* 对象属性拷贝

* 将源对象的属性拷贝到目标对象

*

* @param source 源对象

* @param target 目标对象

*/

public static void copyProperties(Object source, Object target) {

try {

BeanUtils.copyProperties(source, target);

} catch (BeansException e) {

LOGGER.error("BeanUtil property copy failed :BeansException", e);

} catch (Exception e) {

LOGGER.error("BeanUtil property copy failed:Exception", e);

}

}

2、List集合之间的对象属性赋值

/**

* @param input 输入集合

* @param clzz 输出集合类型

* @param 输入集合类型

* @param 输出集合类型

* @return 返回集合

*/

public static List convertList2List(List input, Class clzz) {

List output = Lists.newArrayList();

if (CollectionUtils.isNotEmpty(input)) {

for (E source : input) {

T target = BeanUtils.instantiate(clzz);

BeanUtil.copyProperties(source, target);

output.add(target);

}

}

return output;

}

比如有两个类,User和Employee,将存储Employee对象的List赋给存储User对象的List。

User类:

public class User {

private String name;

private Integer age;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

@Override

public String toString() {

return "User{" +

"name='" + name + '\'' +

", age=" + age +

'}';

}

}

Employee类:

public class Employee {

private String name;

private Integer age;

private String dept;

public Employee(String name, Integer age, String dept) {

this.name = name;

this.age = age;

this.dept = dept;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

public String getDept() {

return dept;

}

public void setDept(String dept) {

this.dept = dept;

}

@Override

public String toString() {

return "Employee{" +

"name='" + name + '\'' +

", age=" + age +

", dept='" + dept + '\'' +

'}';

}

}

测试类:

@RunWith(PowerMockRunner.class)

public class TestUtil

{

@Test

public void test(){

Employee ee1=new Employee("A",21,"it");

Employee ee2=new Employee("B",23,"account");

User user=new User();

BeanUtil.copyProperties(ee1, user);

System.out.println(user);

System.out.println("-------------分割线--------------");

List output=new ArrayList<>();

List source= Arrays.asList(ee1,ee2);

output=BeanUtil.convertList2List(source,User.class);

for (User str:output) {

System.out.println(str);

}

}

}

d671475a89f49c6a85ce5b60da241ab1.png

到此这篇关于使用BeanUtils.copyProperties进行对象之间的属性赋值的文章就介绍到这了,更多相关BeanUtils.copyProperties对象赋值内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

两个包中的 `copyProperties` 方法都可以用于将一个JavaBean的属性赋值到另一个JavaBean中,但是两个方法的实现有所不同。`org.springframework.beans.BeanUtils` 包下的 `copyProperties` 方法只进行浅拷贝,而 `org.apache.commons.beanutils.BeanUtils` 包下的 `copyProperties` 方法可以通过参数配置实现浅拷贝和深拷贝。具体来说,浅拷贝只拷贝JavaBean对象本身的属性值,如果属性值是引用类型,则只复制引用地址。而深拷贝会递归地将所有属性值都进行复制,即使属性值是引用类型也会递归拷贝其内部的属性值。 下面是两个包中 `copyProperties` 的不同实现方式的范例代码: 1. `org.springframework.beans.BeanUtils` 包下的 `copyProperties` 只进行浅拷贝,范例如下: ```java import org.springframework.beans.BeanUtils; public class Source { private int id; private String name; public Source(int id, String name) { this.id = id; this.name = name; } // getters and setters } public class Target { private int id; private String name; public Target() {} // getters and setters } Source source = new Source(1, "test"); Target target = new Target(); BeanUtils.copyProperties(source, target); System.out.println(target.getId()); // 输出:1 System.out.println(target.getName()); // 输出:test ``` 2. `org.apache.commons.beanutils.BeanUtils` 包下的 `copyProperties` 可以通过参数控制是否进行深拷贝,范例如下: ```java import org.apache.commons.beanutils.BeanUtils; public class Source { private int id; private String name; public Source(int id, String name) { this.id = id; this.name = name; } // getters and setters } public class Target { private int id; private String name; public Target() {} // getters and setters } Source source = new Source(1, "test"); Target target = new Target(); BeanUtils.copyProperties(target, source); System.out.println(target.getId()); // 输出:1 System.out.println(target.getName()); // 输出:test ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值