【发布时间】:2021-09-13 06:42:40
【问题描述】:
我无法理解为什么下面的第二次调用会产生编译器错误。为什么不能像第一次调用那样将 Number 推断为类型参数?
typeArgInference(new Integer[100], new ArrayList<Number>()); // Infers Number
typeArgInference(new Number[100], new ArrayList<Integer>()); // compiler error
<T> void typeArgInference(T[] a, Collection<T> c) {}
可能是我在这里遗漏了一些东西。如果 JLS 对此行为有任何规定,请务必附上链接。
【问题讨论】:
-
您是否意识到
Collection<Integer>不能隐式转换为Collection<Number>? -
错误是什么?
-
类型参数推断可能导致不变性这一事实并没有引起我的注意。一直在研究仅涉及非泛型方法的不变性示例。谢谢。
标签: java generics type-inference