У меня есть этот класс:Инстанцирование общего класса и реализуют общий интерфейс
public DrawItem {
protected String getSeperator() {
return "";
}
.......
// some other methods
}
Я еще один класс, который расширяет DrawItem
.
public DrawNumber extends DrawItem {
@Override
protected String getSeperator() {
return "-";
}
}
Теперь, в общем классе CombinationGenerator<E>
, я пытаюсь создать экземпляр объектов DrawItem
/DrawNumber
. Поскольку создание экземпляра типичного типа невозможно в java (например, new E(...)
), я создал интерфейс Factory в соответствии с ответом this.
public interface DrawItemFactory<E> {
E create(...);
}
Тогда в CombinationGenerator<E>
классе
public class CombinationGenerator<E> {
DrawItemFactory<E> factory;
public CombinationGenerator<E>(DrawItemFactory<E> factory) {
this.factory = factory;
}
public List<E> generate() {
......
list.add(factory.create(...));
......
}
}
А теперь DrawNumber
класс реализует интерфейс DrawItemFactory<DrawItem>
.
public DrawItem implements DrawItemFactory<DrawItem> {
protected String getSeperator() {
return "";
}
@Override
public DrawItem create(...) {
return new DrawItem(...);
}
.......
// some other methods
}
И я могу создать класс CombinationGenerator<DrawItem>
.
DrawItem drawItem = new DrawItem(...);
CombinationGenerator<DrawItem> generator = new CombinationGenerator<DrawItem>(drawItem);
List<DrawItem> combinations = generator.generate();
До сих пор все в порядке. Но когда я пытаюсь создать DrawNumber
класс, как это,
public DrawNumber implements DrawItemFactory<DrawNumber> {
....
}
Это дает мне следующую ошибку:
The interface DrawItemFactory cannot be implemented more than once with different arguments: DrawItemFactory<DrawItem> and DrawItemFactory<DrawNumber>
Я пытался this решение, но я получил ту же ошибку. Есть ли другой способ сделать это?
Почему вы делаете DrawItem фабрику DrawItem? Для создания DrawItem вам понадобится DrawIem. Довольно странно. Используйте отдельные классы как фабрики. –
Спасибо .. решил проблему, создав два отдельных класса фабрики. –