Java 我们为什么要使用“;?超级T";在爪哇?

Java 我们为什么要使用“;?超级T";在爪哇?,java,generics,super,Java,Generics,Super,例如,在使用泛型比较器时使用它-比较器并不意味着t及其超类。它意味着T及其子类。 所以不,列表不能接收任何对象,它可以接收任何数字的子类 List<? super Number> numbers = new ArrayList<>(); Integer i = 23; Double d = 3.14; Object o = new Object(); numbers.add(i); numbers.add(d); numbers.add(o); // compilatio

例如,在使用泛型比较器时使用它-
比较器并不意味着t及其超类。它意味着T及其子类。
所以不,列表不能接收任何对象,它可以接收任何数字的子类

List<? super Number> numbers = new ArrayList<>();
Integer i = 23;
Double d = 3.14;
Object o = new Object();
numbers.add(i);
numbers.add(d);
numbers.add(o); // compilation error

事实上,我们可以添加一个
对象
,如果它是一个
数字
。当然,所有
Number
s都是
Object
s,尽管并非所有
Object
s都是
Number
s。但是,如果它被声明为
对象
,那么我们首先必须将它转换为
数字

您可以添加代码示例来说明您的意思吗?现在,你的答案要么不清楚(至少对我来说)要么是错的。对不起,那应该是“它可以接收任何子类的数字”而不是“它可以接收任何子类的列表”。你能澄清一下你这里所说的“接收”是什么意思吗?实际上,简短的可编译和可执行示例在这里会很好。在这里的某个地方可能有一个好问题,但它还没有缩小范围,从它是如何提出的来看,您似乎还没有阅读相关问题。如果您可以查看链接的问题,然后用更多代码制作一个特定的示例,那么这可能会更好。
Object o2 = 300;
numbers.add(o2);    // compilation error
numbers.add((Number) o2);   // no compilation error once we cast it