java 泛型中的边界扩展通配符
Boundly-extended Wildcards in java Generics
我尝试泛型有一段时间了,但我想出了我无法解释的 smt:
如果我们有这样的方法 return 集合的第一个元素:
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));
所以,我的问题是 returned 在 magic_method 中输入的实际内容是什么?
<? extends T>
如果我们传递 Integer
的集合,编译器会自动 "understand"
T
应该是 Number
(因为 Number
是 Integer
的超 class)?
还是我遗漏了什么?
这不是 extends
在此上下文中的意思。这里 extends
表示“T
或 T
的子类型”。
将 ? extends T
视为可以分配给类型 T
的变量的类型说明符。
我尝试泛型有一段时间了,但我想出了我无法解释的 smt:
如果我们有这样的方法 return 集合的第一个元素:
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));
所以,我的问题是 returned 在 magic_method 中输入的实际内容是什么?
<? extends T>
如果我们传递 Integer
的集合,编译器会自动 "understand"
T
应该是 Number
(因为 Number
是 Integer
的超 class)?
还是我遗漏了什么?
这不是 extends
在此上下文中的意思。这里 extends
表示“T
或 T
的子类型”。
将 ? extends T
视为可以分配给类型 T
的变量的类型说明符。