作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
非常简单的 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)
.
最佳答案
protected abstract Editor<? extends T> getEditorFor(T obj);
意味着 getEditorFor()
为 T 的未知子类型返回一个编辑器。
您不能将 T
类型的任何值传递给该结果,因为编译器无法证明 obj
与 的相同具体子类型一起工作T
是 obj
的类型。
解决办法是改变
protected abstract Editor<? extends T> getEditorFor(T obj);
到
protected abstract Editor<? super T> getEditorFor(T obj);
表示 getEditorFor
返回一个编辑器,该编辑器编辑包含 obj
的未知类型。
关于java - 对泛型有界通配符类型的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8648767/
我是一名优秀的程序员,十分优秀!