我正在編寫一個用於克隆對象的複製構造函數。當一個班級有一個參考對象時,其他班級進一步接受這個對象。如何避免複製構造函數中的instanceof繼承java clasess
class Person
{
String name;
Address address;
}
class HomeAdress extends Address
{
}
class OfficeAdress extends Address
{
}
現在在Person的複製構造函數中,要決定要將哪個Address對象進行注入,我必須使用instanceof。
public Person(Person p)
{
name = p.name;
if(p.address instanceof HomeAddress)
{
address = new HomeAddress((HomeAddress) address);
}else if(p.address instanceof OfficeAddress)
{
address = new OfficeAddress((OfficeAddress) address);
}
}
因此,這種基本問題與新型地址添加到模型時相同。我將不得不在Person拷貝構造函數中添加一個相同的檢查。有沒有辦法避免instanceof檢查來實例化正確的地址對象。我可以使用refelction從代碼中避免instanceof嗎?
不是你的實際問題的答案,但你應該使用'address = new HomeAddress((HomeAddress)p.address);'(你忘了'p.'兩次)。 – jlordo 2013-03-01 14:11:38
我有類似的情況,並在鏈接中解決。 http://stackoverflow.com/questions/13450953/create-an-instance-within-abstract-class-using-reflection。希望這有助於公共類派生擴展基本公共類靜態無效的主要(字符串...參數){ System.out.println(new Derived()。createInstance()); } } 抽象類基地{ 公共基地的createInstance(){ 使用反射 嘗試{//返回 的getClass()asSubclass(Base.class).newInstance(); (異常e){ throw new AssertionError(e); } } } – 2013-03-01 14:14:48
最好的方法是避免複製構造函數。我從來沒有寫過一個Java的十六年。你爲什麼認爲你需要一個? – EJP 2013-03-01 22:26:11