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);
}
}