我无法理解为什么下面的第二次调用会导致编译器错误。为什么不能像第一次调用那样将 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) {}
Run Code Online (Sandbox Code Playgroud)
可能是我在这里遗漏了一些东西。如果 JLS 对此行为有任何规定,请务必包含链接。