对于类,我们必须在java中实现数据结构,而不使用默认已经实现的数据结构,所以不,我不能使用Lists
。以前有一些情况需要创建一个泛型类型的数组 T
并且以下工作没有问题:
class Test<T> {
private T[] array;
@SuppressWarnings("unchecked")
public Test(int sz) {
array = (T[]) new Object[sz];
}
public static void main(String[] args) {
Test test = new Test(1);
}
}
现在代替 T
类型的数组,有必要创建一个 Thing<T>
类型的数组其中 Thing 是一个类...相同的方法会给出运行时错误 (java.lang.ClassCastException):
class Thing<T> { }
class Test<T> {
private Thing<T>[] array;
@SuppressWarnings("unchecked")
public Test(int sz) {
array = (Thing<T>[]) new Object[sz];
}
public static void main(String[] args) {
Test<Object> test = new Test<>(1);
}
}
对于第二种情况可以做什么?
最佳答案
您正在尝试转换 Object
的列表至Thing
其中Object
不是,所以它不会工作。
您面临的问题是in Java you can't instantiate an array of generic types .
因此,创建一个原始类型的数组 Thing[]
并将其转换为泛型类型 Thing<T>[]
,在本例中这是可以的,因为有 type erasure无论如何都会发生。
class Thing<T> {
}
class Test<T> {
private Thing<T>[] array;
@SuppressWarnings("unchecked")
public Test(int sz) {
array = (Thing<T>[]) new Thing[sz];
}
public static void main(String[] args) {
Test<Object> test = new Test<>(1);
}
}
关于java - 创建类的泛型类型数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59520199/