Конструктор копирования для абстрактного класса
у меня есть абстрактный класс с именем AClass
. В том же пакете у меня есть AnotherClass
, в котором у меня есть ArrayList
of AClass
объекты. В конструкторе копирования AnotherClass
мне нужно сделать дубликат AClass
объекты внутри ArrayList
.
проблема:
Я не могу создать конструктор копии в 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
}
}
...
}
1 ответов
Я не могу создать конструктор копии в
AClass
потому что это абстрактный класс, и я не могу знать имя класса, который унаследуетAClass
это вообще правильно. Однако, так как у вас есть список AClass
, вам не нужно знать точный подтип: достаточно абстрактной функции, которая делает копию:
protected abstract AClass makeCopy();
это похоже на