要创建通用数组,我在包括这个在内的许多网站上都看到了以下推荐。但是,我想知道为什么我们不在数组创建中直接使用泛型类。是什么原因促使我们不使用下面的数组创建方法?
目前使用的是什么
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);
}
}
答案 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
。