【发布时间】:2013-02-16 01:39:10
【问题描述】:
我正在编写一个用于克隆对象的复制构造函数。当一个类引用了一个被少数其他类进一步继承的对象时。
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.)。 -
我有类似的情况,并在链接中解决。 stackoverflow.com/questions/13450953/… 。希望对您有所帮助 public class Derived extends Base { public static void main(String ... args) { System.out.println(new Derived().createInstance()); } } abstract class Base { public Base createInstance() { //使用反射 try { return getClass().asSubclass(Base.class).newInstance(); } catch (Exception e) { throw new AssertionError(e); } } }
-
最好的方法是避免使用复制构造函数。我在 Java 的 16 年中从未写过一篇。为什么你认为你需要一个?
标签: java inheritance copy-constructor cloning