【发布时间】:2018-01-01 15:28:20
【问题描述】:
我是 Java 新手,我在网上阅读了很多关于 ? super T 或 ? extends T 的文章,但我仍然不明白。这是我的例子:
public class A<T> {
private T t;
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
public void doExtends(A<? extends T> b) {
T t = b.getT(); //ok
this.setT(b.getT()); // ok
b.setT(this.getT()); // error
}
public void doSuper(A<? super T> b) {
T t = b.getT(); // error
this.setT(b.getT()); // error
b.setT(this.getT()); // ok
}
}
为什么会出现错误?我的问题与 cmets 中引用的问题不同
【问题讨论】:
-
什么错误?你能告诉我们堆栈跟踪吗?
-
@ItamarG3 在代码中阅读我的推荐......它不会编译
-
但是异常的类型是什么?我注意到是什么行导致了这种情况,但我无法确切知道抛出了哪个异常。顺便说一句,不要担心否决票。如果您阅读(将来时)How to Ask 页面,那么我敢肯定在您发布的未来问题中这种情况会减少
-
@ItamarG3 没有抛出异常,OP有编译错误。
-
在doSuper b.getT()中返回一个超类型给T,它可能是一个Object。您可以将
Ts 添加到其中,但您无法将T输出。
标签: java