으로 downcasting : 자바 내가이 예와 비슷한 자바 1.6 모델을 하바 반사
public class Animal {
public String color;
}
public class Dog extends Animal {
public Float height;
}
public class Bird extends Animal {
public Integer wings;
}
은 지금은 누구의 아이에게 동물에서 캐스팅합니다. 나는 그것이 금지 된 캐스트에 대한 런타임 예외를 던진다는 것을 안다. 그래서 나는 부모 필드만을 가진 생성자와 자바 리플렉션의 도움으로 자식을 가질 수 있다고 생각합니다. 예 :
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) 감사합니다. 나는 다음 부모 생성자에서 할 필요가 있으므로 단지 스프링을 사용하고 있습니다 : 여기서하고있는 모든 값을 복사하는
: 귀하의 질문에 대한 코멘트를 통해 몇 가지 설명을받은 후
public Animal(Animal old){
super();
BeanUtils.copyProperties(old, this);
}
public Dog(Animal old){
super(old);
}
public Bird(Animal old){
super(old);
}
사이드 참고 :.. 당신이 그들을 필요하지 않은 경우, 대신 원시 래퍼의 사용 프리미티브는 것을 작동하도록되어 어떻게 – BackSlash
객체 ? 필드가 없으므로 Dog에있는 필드를 Animal로 설정할 수 없습니다. – f1sh
@ f1sh 자식 필드를 설정하고 싶지 않습니다. 부모 필드가 설정된 자식 객체가 필요합니다. 부모 필드에이 필드가 없으므로 children 필드는 null 값을 가져야합니다. – earnaz