次の例に似た 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 から誰の子にもキャストしたいと思っています。禁止されたキャストの実行時例外をスローすることを知っています。したがって、コンストラクターと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);
}