Java 通过自己的类创建泛型数组

Java 通过自己的类创建泛型数组,java,Java,为了创建一个通用的数组,我在许多网站上看到了下面的推荐,包括这一个。但是,我想知道为什么在创建数组时不直接使用泛型类。是什么原因促使我们不使用下面的数组创建方法 目前使用的是什么 public class X<T> { private Y<T> tTypeClass = null; public T[] Array() { T[] array = (T[]) Array.newInstance(tTypeClass.ge

为了创建一个通用的数组,我在许多网站上看到了下面的推荐,包括这一个。但是,我想知道为什么在创建数组时不直接使用泛型类。是什么原因促使我们不使用下面的数组创建方法

目前使用的是什么

public class X<T>  {

    private Y<T> tTypeClass = null;

    public T[] Array() {       
        T[] array = (T[]) Array.newInstance(tTypeClass.getObject().getClass(),4); 
    }
}
公共类X{
private Y tTypeClass=null;
公共T[]数组(){
T[]数组=(T[])array.newInstance(tTypeClass.getObject().getClass(),4);
}
}
为什么我们不使用

public class X<T>  {

    public T[] arrayCreation() {       
        T[] array = (T[]) Array.newInstance(this.getClass(),4); 
    }
}
公共类X{
公共T[]数组创建(){
T[]数组=(T[])array.newInstance(this.getClass(),4);
}
}

您不能编写类似于
t[]arr=newt[xx]
的代码,因为Java泛型是类型擦除的。运行时不知道运行时的
T
是什么,因为Java编译器在编译时用强制转换替换了所有泛型

而且

公共类X{
公共T[]数组创建(){
T[]数组=(T[])array.newInstance(this.getClass(),4);
}
}

将导致ClassCastException,因为它创建了一个
X[]
数组,并尝试将其强制转换为
T[]

,因为强制转换不安全。例如:

String[]s=new X().arrayCreation();
将导致
java.lang.ClassCastException

public class X<T>  {

    public T[] arrayCreation() {       
        T[] array = (T[]) Array.newInstance(this.getClass(),4); 
    }
}