为什么可以,最主要原因就是java中的泛型采用的是擦除方案,在编译过后T被替换成了Object类型了,所以在运行不会报ClassCastException类型转换错误。
public class Test<T>
{
public static void main(String[] args)
{
//转型错误ClassCastException
//String[] strArr = (String[]) new Object[1];
new Test<String>().test(new String("str"));
}
private void test(T t)
{
//奇怪:这样可以强制向下转型
T[] tArr = (T[]) new Object[1];
tArr[0] = t;
System.out.println(tArr[0]);//str
//泛型不能实例化,所以不能创建泛型数组
//tArr = new T[1];
//泛型不能实例化,所以不能实例化T类型
//tArr[0] = new T();
}
}