待解决问题:T[] ts = new T[0]如何实现?

数组和列表转换一直以来都要自己手工写代码,没有一个合适的方式进行转换,所以今天就写了一个基于泛型的数据转换,结果就出了这个问题。根本问题是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.

发布了334 篇原创文章 · 获赞 103 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/weixin_43145361/article/details/104699677