数组和列表转换一直以来都要自己手工写代码,没有一个合适的方式进行转换,所以今天就写了一个基于泛型的数据转换,结果就出了这个问题。根本问题是T[] ts = new T[0];
如何实现?
虽然找到了一个方法 Array.newInstance
可以实现,但是必需得有一个实例。当数组长度为0时,则无法实现。所以在以下的代码中,当输入为 null
或为 0时,返回均为 null
算是不完美解决。
如有知道的朋友,欢迎告之。
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;
public class Converter {
public static void main(String[] args) {
// 输入数列
List<String> list = new ArrayList<>();
for(int i = 0; i < 10; i++)
list.add("item " + i);
// 数列转数组
String[] strs = Converter.<String>toArray(list);
// 数组转数列
List<String> list1 = Converter.<String>toListT(strs);
// 输出
for(int i = 0; i < strs.length; i++)
System.out.printf("strs[%d] = %s, list.get(%d) = %s.\n", i, strs[i], i, list1.get(i));
}
// 链表转数组
@SuppressWarnings("unchecked")
public static <T> T[] toArray(List<T> list) {
if(list == null || list.size() == 0)
return null;
// 问题:以下这个函数必需要有一个T的实例才能创建数组,如果list为空,则无法创建。
T[] ts = (T[]) Array.newInstance(list.get(0).getClass(), list.size());
int i = 0;
for(T t: list)
ts[i++] = t;
return ts;
}
// 数组转链表
public static <T> List<T> toListT(T[] array) {
List<T> list = new ArrayList<T>();
for (int i = 0; i < array.length; i++)
list.add(array[i]);
return list;
}
}
strs[0] = item 0, list1.get(0) = item 0.
strs[1] = item 1, list1.get(1) = item 1.
strs[2] = item 2, list1.get(2) = item 2.
strs[3] = item 3, list1.get(3) = item 3.
strs[4] = item 4, list1.get(4) = item 4.