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)

この理由は何でしょうか?事前にt​​hx!

4

2 に答える 2

5
(SomeClazz[])somes.toArray()

する必要があります

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

Object[]anを aにキャストすることはできませんSomeClazz[]が、これは、選択した配列型にコレクションをダンプする「承認された」方法です。

于 2013-05-20T18:59:41.093 に答える
1

のjavadocによるとList.toArray

Object[] java.util.List.toArray()

このリスト内のすべての要素を適切な順序で (最初の要素から最後の要素まで) 含む配列を返します。

返された配列は、それへの参照がこのリストによって維持されないという点で「安全」です。(言い換えると、このリストが配列によって支えられている場合でも、このメソッドは新しい配列を割り当てる必要があります)。したがって、呼び出し元は、返された配列を自由に変更できます。

このメソッドは、配列ベースの API とコレクション ベースの API の間のブリッジとして機能します。

代わりに使用List.toArray(T[] arr)

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

具体的には:

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