常用的对象拷贝方法有三种:
1.通过set,get方法:
//创建user类
public class User {
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String toString(){
return "name:"+name+",age:"+age;
}
}
//创建person类
public class Person {
private String name ;
private String age;
private String gender;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String toString(){
return "name:"+name+",age:"+age+",gender:"+gender;
}
}
//测试类
public class DemoUtil {
public static void main(String[] args) throws Exception{
User user = new User();
user.setAge("15");
user.setName("Lisi");
Person person = new Person();
//通过set,get方法,吧user对象的信息拷贝到person
person.setAge(user.getAge());
person.setName(user.getName());
System.out.println(user.toString());
System.out.println(person.toString());
}
}
//输出结果
user=name:Lisi,age:15
person=name:Lisi,age:15,gender:null
2.通过apache的BeanUtils工具类:
如果属性非常的多,使用set,get方法非常的麻烦。
可以使用工具类来解决:
org.apache.commons.beanutils.BeanUtilsimport
public class DemoUtil {
public static void main(String[] args) throws Exception{
String name ="LiMing";
String age ="18";
User user = new User();
BeanUtils.setProperty(user,"name",name);
BeanUtils.setProperty(user,"age",age);
System.out.println("user="+user.toString());
Person person= new Person();
BeanUtils.copyProperties(person,user);
System.out.println("person:"+person.toString());
}
}
3.通过spring的BeanUtils工具类:
import org.springframework.beans.BeanUtils;//主意导入的是spring的工具类
public class DemoUtil {
public static void main(String[] args) throws Exception{
User user = new User();
user.setAge("17");
user.setName("zhangSan");
System.out.println("user="+user.toString());
Person person= new Person();
BeanUtils.copyProperties(user,person);
System.out.println("person:"+person.toString());
}
}
结果:
user=name:zhangSan,age:17
person:name:zhangSan,age:17,gender:null
总结:从功能上看这三种常用的方法都能实现对象的拷贝,但是set,get方式性能更好,适用于字段属性较少的场景。工具类适用于大量属性需要拷贝的情况,spring的工具类的性能差些,apache的工具类的性能最差,如非必要,不要使用。不过需要注意的是spring和apache的copyProperties方法参数的位置正好是相反的,spring的copyProperties方法参数中,被拷贝的对象在后面,而apache的copyProperties方法参数被拷贝的对象在前面。并且这2种拷贝都是浅拷贝,对于不知道什么是浅拷贝和深拷贝的自行百度吧。