Java 关于泛型有界通配符类型的混淆
非常简单的Java问题。此代码有一个错误:Java 关于泛型有界通配符类型的混淆,java,generics,bounded-wildcard,Java,Generics,Bounded Wildcard,非常简单的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 = ge
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
设置为Entity
,并且getEditorFor(T obj)
负责返回Editor
,其中X
取决于obj
的具体类型,并且始终是-AT
。因此,如果您有子依赖编辑器
,getEditorFor(tobj)
在obj
为EntityA
时返回Editor
,在obj
为EntityB
时返回Editor
这有没有可能在没有警告的情况下实现
更新:
protected abstract Editor<? extends T> getEditorFor(T obj);
受保护的摘要编辑器
到
受保护的摘要编辑器
到
受保护的抽象编辑器代码给出了什么错误?在某些地方使用通配符(?扩展T
)而不是整个T
的理由是什么?编译器实际上说了什么错误?方法edit
是否在Editor
界面中定义?编辑器的签名是什么?edit
?@chrisbunney:类型App中的方法编辑(捕获2-of?扩展T)。编辑器不适用于参数(T)
代码给出的错误是什么?您使用通配符的理由是什么(?扩展T
)在某些地方,而不是在整个T
?编译器实际上说了什么错误?方法edit
是在编辑器界面中定义的吗?方法编辑器的签名是什么。edit
?@chrisbunney:方法编辑(捕获-2-of?扩展T)在类型App.Editor中,不适用于参数(T)
protected abstract Editor<? extends T> getEditorFor(T obj);
protected abstract Editor<? extends T> getEditorFor(T obj);
protected abstract Editor<? extends T> getEditorFor(T obj);
protected abstract Editor<? super T> getEditorFor(T obj);