试图使某些泛型工作,我得到了以下简化示例:
Set<? extends Number> setOfNumbers;
Set<? extends Integer> setOfIntegers = new HashSet<>();
setOfNumbers = setOfIntegers; // compiles
List<Set<? extends Number>> listOfSetOfNumbers;
List<Set<? extends Integer>> listOfSetOfIntegers = new LinkedList<>();
listOfSetOfNumbers = listOfSetOfIntegers; // does not compile
我理解(显然不完全)并且经常使用类型界限,但是这种情况使我感到困惑。如果有的话,我希望listOfSetOfIntegers = listOfSetOfNumber;
不起作用(实际上也不起作用)。
那是为什么?