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 {}

one 将T设置为EntitygetEditorFor(T obj)负责返回Editor<X>whereX取决于obj的具体类型,并且始终为 Is-A T。所以,如果你有SubTypeDependentEditor<Entity>getEditorFor(T obj)返回Editor<EntityA>when objisEntityAEditor<EntityB>when objis EntityB

这有没有可能在没有警告的情况下实施?

更新:

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 的未知子类型的编辑器。

您不能将 use 任何类型的值T与该结果一起传递,因为编译器无法证明它与thatobj的类型的相同具体子类型一起工作。Tobj

解决方法是改变

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

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

它表示getEditorFor返回编辑未知类型的编辑器,其中包括obj.

于 2011-12-27T20:16:26.123 回答