java.util.Arrays.sort(Object[] a) に オブジェクトの配列を渡してソートしようと思った。
で、Comparator インターフェースを実装したオブジェクトの配列を渡したら、
java.lang.ClassCastException
at java.util.Arrays.mergeSort(Arrays.java:1152)
at java.util.Arrays.mergeSort(Arrays.java:1163)
at java.util.Arrays.sort(Arrays.java:1079)
と例外が出た。
実は、Comparator ではなく Comparable を実装する必要があった。
まぎらわしいことに、Arrays クラスの sort メソッドは2つあって、
ひとつは、Comparable を実装したオブジェクトが必要で、
もうひとつは、Comparator を実装したオブジェクトが必要になる。
Comparable → Arrays.sort(Object[] a)
Comparator → Arrays.sort(Object[] a, Comparator c)
JDK1.4のドキュメントには、
Arrays.sort(Object[] a)では、「配列のすべての要素は、Comparable インタフェースを実装している必要があります。」とあり、
Arrays.sort(Object[] a, Comparator c)では、「指定されたコンパレータが示す順序に従って、指定されたオブジェクトの配列をソートします。」と書いてある。
tags: zlashdot Java Java
Posted by NI-Lab. (@nilab)
コメント
NI-Lab.たちが、ドキュメントとかをComparableしなかった?
投稿者: BlogPetのづらねこにゃん | 2006年05月14日 11:25