我在Java 1.6中有一个类似于此示例的模型:
public class Animal {
public String color;
}
public class Dog extends Animal {
public Float height;
}
public class Bird extends Animal {
public Integer wings;
}
现在我想从《动物》到任何一个孩子。我知道它为被禁止的强制转换抛出了一个运行时异常。因此,我认为在构造函数和java反射的帮助下,可以只拥有父字段的子字段。示例:
public class Animal {
public String color;
public Animal(Animal old){
//Set all fields by reflection. but how!
}
}
public class Dog extends Animal {
public Float height;
public Dog (Animal old){
super(old);
}
}
public class Bird extends Animal {
public Integer wings;
public Bird (Animal old){
super(old);
}
}
但是如何设置所有带反射的去父字段
Thinaesh解决方案(https://stackoverflow.com/a/17697270/1474638)谢谢!。我正在使用Spring,所以我只需要在父构造函数中做下一步:
public Animal(Animal old){
super();
BeanUtils.copyProperties(old, this);
}
public Dog(Animal old){
super(old);
}
public Bird(Animal old){
super(old);
}
尝试Apache公共库中的BeanUtils.copyProperties。(Spring的BeanUtils类中也有同样的功能。
通过对问题的评论进行澄清后:
您在这里所做的只是复制类的构造函数中的值。没有必要反思。除非别无选择,否则应避免反射。