1

かなり些細な 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>XobjTSubTypeDependentEditor<Entity>getEditorFor(T obj)Editor<EntityA>objEntityAEditor<EntityB>objEntityB

これを警告なしで実装できる可能性はありますか?

アップデート:

protected abstract Editor<? extends T> getEditorFor(T obj);     

Editor<X>基本的に他の署名を持つことができますが、そのコードを実装するコードEditor<T>にはgetEditorFor(T obj).

4

1 に答える 1

4
protected abstract Editor<? extends T> getEditorFor(T obj);

getEditorFor()T の未知のサブタイプのエディターを返すことを意味します。

コンパイラは、その型の同じ具体的なサブタイプで動作Tすることを証明できないため、その結果で type の値を渡すことはできません。objTobj

解決策は変更することです

protected abstract Editor<? extends T> getEditorFor(T obj);

protected abstract Editor<? super T> getEditorFor(T obj);

これは、getEditorForを含む未知のタイプを編集するエディターを返すことを示していますobj

于 2011-12-27T20:16:26.123 に答える