我想写一个方法list->array 想利用泛型,代码如下
public static <T> T[] list2Array(List<T> list){
T[] array = (T[])list.toArray(new T[list.size()]);
return array;
}
也就是传过来的String就返回String数组 Integer就返回Integer数组。但是这个new T[list.size]这里有问题,请问怎么解决?谢谢。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
这个Effective Java第二版里有说到, Item25.
给出例子说明我的理解, 类似的代码, 在泛型集合下, 会在静态编译阶段报错; 而泛型数组在运行阶段给出ArrayStoreException:
没有泛型数组,这一说
toArray()
方法有两种,带参和不带参.带参的情况下,参数就是一个一个泛型数组,如
T[] a
,相当于你手动构造一个数组,传入方法中.toArray()
内部是一个copy的实现.举两个例子.
1:
String[][] str_a = (String [][]) arr.toArray(new String[0][0]);
2 :
String[][] a = new String[<size>][size];
String [][] str_a = (String [][]) arr.toArray(a);
当然 要保证转型成功,不然会引发ClassCastException.
--------------------------分割线-------------------------
以下是源码中是实现,实际上就是一个copy操作.