当Java Generic T由不同的参数类型参数化时,奇怪的编译错误

时间:2019-04-05 07:55:13

标签: java generics

我正在研究Java Oracle提供的有关泛型的link。现在,在“通用方法”部分下,它说明了通用T可以同时采用不同的参数。

示例代码

public static void main(String[] args)
{
    Object [] arrObjects = new Object[1];
    List<String> stringList = new ArrayList<>();
    List<Object> objectList = new ArrayList<>();
    String [] arrString = new String[1];

    fromArrayToCollection(arrString, objectList);  // Works properly
    fromArrayToCollection(arrObjects, stringList); // Gives compilation error

}

private static <T> void fromArrayToCollection(T[] a, Collection<T> c) {
    for (T o : c) {
        a[0] = o; // Correct
    }
}

在此示例中,从一种情况调用fromArrayToCollection方法是正确的,但在另一种情况下会引发编译错误。

该链接还显示相似的行

  

我们可以使用任何其元素类型是数组元素类型的超类型的集合来调用此方法。

它说收集元素类型应该是数组元素的超类型,但为什么不能呢?

0 个答案:

没有答案