<有什么区别?扩展 Base> <T 扩展 Base>?
在此示例中:
import java.util.*;
public class Example {
static void doesntCompile(Map<Integer, List<? extends Number>> map) {}
static <T extends Number> void compiles(Map<Integer, List<T>> map) {}
static void function(List<? extends Number> outer)
{
doesntCompile(new HashMap<Integer, List<Integer>>());
compiles(new HashMap<Integer, List<Integer>>());
}
}
doesntCompile()
无法使用以下命令进行编译:
Example.java:9: error: incompatible types: HashMap<Integer,List<Integer>> cannot be converted to Map<Integer,List<? extends Number>>
doesntCompile(new HashMap<Integer, List<Integer>>());
^
而编译器接受。compiles()
这个答案解释了唯一的区别是 不像 ,允许您稍后引用该类型,但事实似乎并非如此。<? ...>
<T ...>
在这种情况下,和 之间有什么区别,为什么第一个不能编译?<? extends Number>
<T extends Number>