java创建泛型数组
java中创建泛型数组并不是不可能,创建泛型数组通过反射,给构造函数传递两个参数,一个类型标记,一个数组大小。‘
简单Demo如下:
import java.lang.reflect.Array; /** * 创建泛型数组 * @author hetiantian */ public class GenericArrayWithTypeToken<T> { private T[] array; public GenericArrayWithTypeToken(Class<T> type, int size) { array = (T[]) Array.newInstance(type, size); } public static void main(String[] args) { GenericArrayWithTypeToken<House> g = new GenericArrayWithTypeToken<>(House.class, 10); System.out.println(g.array.getClass().getSimpleName()); System.out.println(g.array.length); } }
运行结果:
House[]
10
从结果来看,成功创建了所想要的数组类型,传递类型参数到构造器中是为了从擦除中恢复
错误的创建方式:
/** * 创建泛型数组 * @author hetiantian */ public class GenericArrayWithTypeToken<T> { private T[] array; public GenericArrayWithTypeToken(int size) { array = (T[]) new Object[size]; } public static void main(String[] args) { GenericArrayWithTypeToken<House> g = new GenericArrayWithTypeToken<>( 10); System.out.println(g.array.getClass().getSimpleName()); System.out.println(g.array.length); } }
数组需要确定的类型,这个Demo中的构造函数相当于T[] array = new T[size]程序运行将会出错