码:
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.