这是一个问题,第一个代码清单编译得很好(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[]
被发现了。
这意味着我的编译器将泛型方法解释为返回Object[]
,尽管它接收到 aString[]
作为其参数。
我仔细检查了toArray(myArray)
方法签名:
<T> T[] toArray(T[] a);
因此,它是一种参数化方法,其类型参数与 List(即)的类型参数<T>
没有任何关系。<E>
我不知道在这里使用原始类型如何影响使用独立类型参数的参数化方法的评估。
- 有谁知道为什么这段代码不能编译?
- 有人知道记录此行为的任何参考吗?