我正在编写一个用于克隆对象的复制构造函数。当一个班级有一个参考对象时,其他班级进一步接受这个对象。如何避免复制构造函数中的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