【发布时间】:2021-11-29 04:11:25
【问题描述】:
我清楚地了解上限,但不完全了解下限。例如我有这个代码:
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 问题,我已经阅读了很多。
【问题讨论】:
-
你必须把你的 Main 类写成 public class Main
-
我认为
<T>这里是Object,它是Base 和String 的合法超类型。基本上,您这样做/考虑这一点的方式是有缺陷的。查看此问题的答案(忽略 PECS 的重复文本):stackoverflow.com/questions/4343202/…