Довольно тривиальный вопрос Java.В этом коде есть ошибка:
public abstract class SubTypeDependentEditor<T> implements Editor<T> {
protected abstract Editor<? extends T> getEditorFor(T obj);
public void edit(T obj) {
Editor<? extends T> editor = getEditorFor(obj);
editor.edit(obj); // ERROR IS HERE
}
}
Как правильно ее исправить?
Идея T
в основном является просто типом корня иерархии классов, поэтому с учетом такой иерархии:
class Entity {}
class EntityA extends Entity {}
class EntityB extends Entity {}
один будет иметь T
, установленный на Entity
и getEditorFor(T obj)
отвечает за возврат Editor<X>
, где X
зависит от конкретного типа obj
и всегда является Is-A T
.Итак, если у вас есть SubTypeDependentEditor<Entity>
, getEditorFor(T obj)
возвращает Editor<EntityA>
, когда obj
равно EntityA
и Editor<EntityB>
, когда obj
равно EntityB
.
Любой шанс, что это может быть реализовано безпредупреждения?
Обновление:
protected abstract Editor<? extends T> getEditorFor(T obj);
В принципе может иметь любую другую сигнатуру, но код, который реализует этот код, имеет только объекты, которые Editor<X>
, поэтому в случае, если этот метод возвращает Editor<T>
Я не уверен, как реализовать getEditorFor(T obj)
.