我很清楚地理解上界,但对下界并不完全理解。例如,我有以下代码:
public class Main<T> {
private T t;
public Main(T t) {
this.t = t;
}
private static class Base {}
public static void main(String[] args) {
Main<? super Base> main = new Main<>(new StringBuilder());
System.out.println(main.t.getClass());
}
}
即使 StringBuilder
不是 Base
的超类,为什么在编译时没有错误?我认为提供不相关的类型是非法的(我知道在类型推断后无法将非子类分配给 t
),所以我认为会有错误。它也可以与集合一起使用,这是否意味着集合可能存储 Base
的非子类或非超类对象?请不要将我链接到 PECS 问题,我已经阅读过很多。
<T>
是指Object,它是Base和String的合法超类型。你现在的做法/想法基本上是有缺陷的。请查看此问题的答案(忽略PECS的重复文本):https://dev59.com/52855IYBdhLWcg3wbzxl - markspace