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