0

当我将 Arrays.sort () 与一个比较器和一个列表作为一个集合使用时,该集合之前被转换为一个数组,我得到一个类转换异常。这是我的代码:

List<SomeClazz> somes = new ArrayList<SomeClazz>();
Comparator<SomeClazz> attrComparator = new AttrComparator();

somes = createSomeObjectes(); // returnes a list of course

// this is line 25 where the exception occours
Arrays.sort((SomeClazz[])somes.toArray(), attrComparator);

异常消息:

Exception in thread "main" java.lang.ClassCastException:
    [Ljava.lang.Object; cannot be 
    cast to [Lpack.SomeClazz; at pack.TestMain.main(TestMain.java:25)

这可能是什么原因?提前谢谢!

4

2 回答 2

5
(SomeClazz[])somes.toArray()

应该

somes.toArray(new SomeClazz[somes.size()])

您不能将 an 强制Object[]转换为 a SomeClazz[],但这是将集合转储到您选择的数组类型的“已批准”方式。

于 2013-05-20T18:59:41.093 回答
1

根据 javadocList.toArray

对象[] java.util.List.toArray()

以正确的顺序(从第一个元素到最后一个元素)返回包含此列表中所有元素的数组。

返回的数组将是“安全的”,因为此列表不维护对它的引用。(换句话说,即使此列表由数组支持,此方法也必须分配一个新数组)。因此,调用者可以自由修改返回的数组。

此方法充当基于数组和基于集合的 API 之间的桥梁。

而是使用List.toArray(T[] arr)

<T> T[] toArray(T[] a);

具体来说:

Arrays.sort(somes.toArray(new SomeClazz[]{}), attrComparator);
于 2013-05-20T19:00:42.773 回答