对于类,我们必须在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);
}
}
第二种情况下该怎么办?
答案 0 :(得分:2)
您正尝试将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);
}
}
答案 1 :(得分:0)