组合原始类型和泛型方法
2022-09-01 14:12:18
这里有一个问题,第一个代码清单编译得很好(JDK 1.6 |JDK 1.7):
ArrayList<String> a = new ArrayList<String>();
String[] s = a.toArray(new String[0]);
但是,如果我将引用声明为原始类型:List
ArrayList a = new ArrayList();
String[] s = a.toArray(new String[0]);
我收到一个编译器错误,说是必需的,但被发现了。String[]
Object[]
这意味着我的编译器正在将泛型方法解释为返回,尽管接收了 a 作为其参数。Object[]
String[]
我仔细检查了方法签名:toArray(myArray)
<T> T[] toArray(T[] a);
因此,它是一个参数化的方法,其类型参数与 List 的类型参数没有任何关系(即 )。<T>
<E>
我不知道在这里使用原始类型如何影响使用独立类型参数的参数化方法的评估。
- 有没有人知道为什么这段代码不能编译?
- 有没有人知道任何记录此行为的参考?