[b]当你使用[size=medium][color=red]commons-beanutils.jar[/color][/size]插件的[color=red][size=medium]BeanUtils.copyProperties[/size][/color]对象拷贝功能时,尤其是涉及到对象深度拷贝的时候尽量避免下面例子:
不要把人装进了狗笼里面[/b]
List<Dog>本来只能添加Dog 但是却从里面取出一个Person
不要把人装进了狗笼里面[/b]
List<Dog>本来只能添加Dog 但是却从里面取出一个Person
import java.util.List;
public class Dogs {
private String id;
private List<Dog> data;
public List<Dog> getData() {
return data;
}
public void setData(List<Dog> data) {
this.data = data;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
import java.util.List;
public class Persons {
private String id;
private List<Person> data;
public List<Person> getData() {
return data;
}
public void setData(List<Person> data) {
this.data = data;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
import java.util.Date;
public class Person {
private String name;
private Date dateAttr;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getDateAttr() {
return dateAttr;
}
public void setDateAttr(Date dateAttr) {
this.dateAttr = dateAttr;
}
}
import java.util.Date;
public class Dog {
private String name;
private Date dateAttr;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getDateAttr() {
return dateAttr;
}
public void setDateAttr(Date dateAttr) {
this.dateAttr = dateAttr;
}
}
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.commons.beanutils.BeanUtils;
import com.coderside.fragment.json.Dog;
import com.coderside.fragment.json.Persons;
import com.coderside.fragment.json.Dogs;
import com.coderside.fragment.json.Person;
public class Test {
public static void main(String[] args) {
//构造一个Persons对象
Persons persons = new Persons();
persons.setId("1");
Person p = new Person();
p.setDateAttr(new Date());
p.setName("dog");
List<Person> list = new ArrayList<Person>();
list.add(p);
persons.setData(list);
//构造一个Dogs对象
Dogs dogs = new Dogs();
try {
BeanUtils.copyProperties(dogs, persons);
for (int i = 0; i < dogs.getData().size(); i++) {
//打印出来的是一个人com.coderside.fragment.json.Person对象
System.out.println(dogs.getData().get(i));
// 下面这句看起来是正常的 运行就会抛异常
// Dog dog = dogs.getData().get(i);
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}