我有一个LinkedList<T>
其中包含 Object toArray()
方法:
public Object[] toArray()
{
Object[] array = new Object[size];
int c=0;
for(Node<T> i = first;i != null;i=i.next)
{
array[c++] = i.data;
}
return array;
}
我想用通用方法对我的 LinkedList 进行排序:<T extends Comparable> void sort (List<T> list)
。要对列表进行排序,我必须在此方法中将它们表示为数组:
T[] elements = (T[])list.toArray();`
但是,我得到ClassCastException
在这一行,我不知道为什么。由于该方法的泛型类型相当于返回数组中元素的运行时类型,因此这种转换不是谎言!
最佳答案
toArray()
返回Object[]
。类型信息丢失,并且无法将其强制转换回 T[]。如果您想保留类型信息,可以使用以下内容。然后,您为该方法提供一个预定义的数组,该数组将被填充。如果您不提供任何内容 - toArray
将创建一个新的 Object[]
。
T[] elements = list.toArray(new T[list.size()]);
只是填充一个数组(另一种写作风格):
T[] elements = new T[list.size()];
list.toArray(elements);
或者如果您使用 Java 8:
T[] elements = list.stream().toArray(T[]::new);
关于Java/泛型/ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35241787/