かなり些細な 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 {}
1 つは にT
設定されEntity
、の具象型に依存し、常に Is-Aに依存する場所getEditorFor(T obj)
を返す責任があります。したがって、 がある場合、when isとwhen isを返します。Editor<X>
X
obj
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)
.