2013-07-17 104 views
1

向下轉換我在Java 1.6的類似於此示例哈瓦模型:與Java反射

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); 
    } 
} 

但如何設定與反思所有德父領域?

SOLUTION BY Thinaeshhttps://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

邊注:如果你不需要它們,使用原語,而不是原始包裝對象 – BackSlash

+1

這怎麼應該工作?你不能設置一個''height''(從Dog類中的一個字段)到Animal,因爲沒有這樣的字段。 – f1sh

+0

@ f1sh我不想設置子字段,我想要一個設置了父字段的子對象。很明顯,子字段必須爲空值,因爲在父類中我沒有這個字段 – earnaz

回答

2

嘗試BeanUtils.copyProperties(Spring的BeanUtils的類可用同樣的事情

+0

非常感謝!我編輯了要求顯示你的解決方案;) – earnaz

0

通過評論你的問題得到一些澄清後一個類的構造函數。沒有必要反思。除非沒有其他辦法,否則應該避免反思。來自Apache的公共圖書館

+0

是的,應該避免反思,但我的問題是如何複製領域與反思。 – earnaz