Java 抽象类的复制构造函数
我有一个名为Java 抽象类的复制构造函数,java,constructor,abstract-class,Java,Constructor,Abstract Class,我有一个名为AClass的抽象类。在同一个包中,我有另一个类,其中有一个AClass对象的ArrayList。在另一个类的复制构造函数中我需要在ArrayList中复制AClass对象 问题是: 我无法在AClass中创建复制构造函数,因为它是一个抽象类,我无法知道将由AClass继承的类的名称。实际上,在这个项目中,没有对象将继承自这个类,但是这个项目将被其他项目用作库,这些项目将提供AClass的类子类。我的设计有错误吗?或者这个问题有解决方案吗 编辑:以下是一些代码: public cla
AClass
的抽象类。在同一个包中,我有另一个类,其中有一个AClass
对象的ArrayList
。在另一个类的复制构造函数中
我需要在ArrayList
中复制AClass
对象
问题是:
我无法在AClass
中创建复制构造函数,因为它是一个抽象类,我无法知道将由AClass
继承的类的名称。实际上,在这个项目中,没有对象将继承自这个类,但是这个项目将被其他项目用作库,这些项目将提供AClass
的类子类。我的设计有错误吗?或者这个问题有解决方案吗
编辑:以下是一些代码:
public class AnotherClass{
private ArrayList<AClass> list;
...
/** Copy constructor
*/
public AnotherClass(AnotherClass another){
// copy all fields from "another"
this.list = new ArrayList<AClass>();
for(int i = 0; i < another.list.size(); i++){
// Option 1: this.list.add(new AClass(another.list.get(i)));
// problem: cannot instantiate AClass as it is abstract
// Option 2: this.list.add(another.list.get(i).someKindOfClone());
// problem? I'm thinking about it, seems to be what dasblinkenlight is suggesting below
}
}
...
}
公共类另一类{
私有数组列表;
...
/**复制构造函数
*/
公共另一类(另一类){
//从“另一个”复制所有字段
this.list=new ArrayList();
for(int i=0;i //问题?我在想,这似乎是dasblinkenlight下面的建议
}
}
...
}
我无法在AClass
中创建复制构造函数,因为它是一个抽象类,我无法知道将由AClass
继承的类的名称
这通常是正确的。但是,由于您有一个AClass
列表,因此不需要知道确切的子类型:创建副本的抽象函数就足够了:
protected abstract AClass makeCopy();
这类似于java.lang.Object
的clone()
函数,只是所有子类都必须实现它,并且返回类型必须是AClass
因为每个子类都知道自己的类型,所以实现makeCopy()
方法应该没有问题。下面是代码中的显示方式:
for (int i = 0 ; i < another.list.size() ; i++) {
this.list.add(another.list.get(i).makeCopy());
}
for(int i=0;i
注意:这种设计被称为,有时非正式地称为“虚拟构造函数”。您能分享相关代码吗?这样解释情况更容易。
AClass
是抽象的。你不能拥有AClass的实例
@Jimmy:其他人将实例化AClass的子对象,我需要为这些未知对象提供一个副本构造函数。过一会儿我会给你看一些代码Jon Skeet来了。他不会错过的。您可以直接接受下面的答案,然后稍后再阅读;)“我在想,这似乎是dasblinkenlight在下面所建议的”正确,这正是我在下面所建议的:-)如果我要做这样的事情,我也会这样做,是的:)+1