我在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;
}
现在我希望从Animal转发给任何一个孩子。我知道它会为forbidden cast抛出一个运行时异常。所以我认为在构造函数和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);
}
}
但是如何用反射设置所有de parent字段?
解决方案来自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);
}
答案 0 :(得分:2)
尝试Apache commons库中的BeanUtils.copyProperties。(在Spring的BeanUtils类中可以使用相同的东西。
答案 1 :(得分:0)
通过对您的问题的评论得到一些澄清:
您在这里所做的只是在类的构造函数中复制值。没有必要反思。除非没有别的办法,否则应该避免反思。