对于类,我们必须在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);
}
}