通过自己的类创建通用数组

时间:2014-07-29 08:57:17

标签: java

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

目前使用的是什么

public class X<T>  {

    private Y<T> tTypeClass = null;

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

为什么我们不使用

public class X<T>  {

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

2 个答案:

答案 0 :(得分:1)

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

此外,

public class X<T>  {

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

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

答案 1 :(得分:0)

因为演员阵容不安全。例如:

String[] s = new X<String>().arrayCreation();

将导致java.lang.ClassCastException