我试验泛型有一段时间了,我想出了smt 我无法解释:
如果我们有这样的方法返回集合的第一个元素:
public static <T> T magic_method(List<? extends T> coll) {
return coll.get(0);
}
假设我们这样称呼它:
List<Integer> l = Arrays.asList(12345);
System.out.println(magic_method(l));
所以,我的问题是 magic_method 中实际返回的类型是什么?
<? extends T>
如果我们传递Integer
集合,编译器是否会自动"理解"该 T
应该Number
(因为Number
是Integer
的超类)?
还是我错过了什么?
在这种情况下,
这不是extends
的意思。这里extends
的意思是"T
或T
的子类型"。
将? extends T
视为可以分配给类型为 T
的变量的类型说明符。