考虑以下代码段:
List<Double> doubleList = null;
List<Integer> integerList = null;
List<Number> numberList = null;
//expression:1
List<? super List<? super Integer>> superDoubleList = Arrays.asList(doubleList, integerList,numberList);
//expression:2
//here doubleList will cause compilation error
List<? extends List<? super Integer>> extendsDoubleList = Arrays.asList(integerList,numberList);//doubleList
- 在这里,我试图了解如何解释这两个陈述
- 表达式:1
- 这里我们说 RHS 上的 List 必须使得列表的所有元素都满足条件
? super List<? super Integer>
- 但是
doubleList
//无论如何都不满足这个条件integerList
-numberList
因为我们期望一个类型是List<? super Integer>
. - 仍然为什么我们在这里没有得到编译错误?
- 这里我们说 RHS 上的 List 必须使得列表的所有元素都满足条件
- 表达:2
- 在这里,我们期望 RHS 上的元素必须是
subtype of List<? super Integer>
- 所以
doubleList
直观上可以看成是一个能满足条件的候选。 - 如果我包含
doubleList
在Arrays.asList
表达式中,为什么仍然会出现编译错误?.
- 在这里,我们期望 RHS 上的元素必须是
- 表达式:1
不确定我是否以正确的方式解释表达式 - 从逻辑上讲它似乎不符合我上面给出的解释可能有什么问题?