这是一个问题,第一个代码清单编译得很好(JDK 1.6 | JDK 1.7):
ArrayList<String> a = new ArrayList<String>();
String[] s = a.toArray(new String[0]);
Run Code Online (Sandbox Code Playgroud)
但是,如果我将List引用声明为原始类型:
ArrayList a = new ArrayList();
String[] s = a.toArray(new String[0]);
Run Code Online (Sandbox Code Playgroud)
我收到编译器错误,说明String[]是必需的,但是Object[]找到了.
这意味着我的编译器将泛型方法解释为返回,Object[]尽管String[]它接收了一个as参数.
我加倍检查了toArray(myArray)方法签名:
<T> T[] toArray(T[] a);
Run Code Online (Sandbox Code Playgroud)
因此,它是一个参数化方法,其类型参数<T>与List(即<E>)的类型参数无关.
我不知道在这里使用原始类型如何影响使用独立类型参数的参数化方法的评估.
我有一个List,保证只包含一个类型对象.这是由我无法更新的库中的某些底层代码创建的.我想基于传入的List对象创建一个List <ObjectType>,以便我的调用代码与List <ObjectType>进行通信.
将List(或任何其他对象集合)转换为List <ObjectType>的最佳方法是什么.