码:
public class CompareTest {
public static void main(String[] args) {
ArrayList list = new ArrayList();
(list).add(new Comparetest());
Arrays.sort(list.toArray()); //Does not throw Exception,why ?
Collections.sort(list); //throws ClassCastException
}
}
根据Java Doc:
Arrays#sort
根据提示,将指定的对象数组按升序排序
其元素的自然排序.数组中的所有元素都必须
实现Comparable接口.
为什么Arrays#sort不会抛出JavaDoc所声明的ClassCastException?
解决方法
因为Arrays.sort()的源代码有这个快捷方式:
int nRemaining = hi - lo;
if (nRemaining < 2)
return; // Arrays of size 0 and 1 are always sorted
因此,它不会检查数组的元素是否实现Comparable,因为它不必对只有一个元素的数组进行排序.
请注意,javadoc不保证抛出ClassCastException.