此API规定实体bean要实现comparable接口并重写compareTo方法,为什么不将API改为Arrays.sort(Compatable[] com)呢?
此API规定实体bean要实现comparable接口并重写compareTo方法,为什么不将API改为Arrays.sort(Compatable[] com)呢?
写成Compatable[]的参数,sort方法就只能接收对象为参数,而简单类型就不能用了,如
int [] a ={1,2,3,6,4,3,23,5,6,7,9};
Arrays.sort(a);
//a = [1, 2, 3, 3, 4, 5, 6, 6, 7, 9, 23]
8 回答6.4k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
1 回答2.2k 阅读✓ 已解决
3 回答1.6k 阅读✓ 已解决
真正的原因是因为Java数组的一个特性导致不得不这样设计。简单来说,Java数组的运行时类型不是由其元素类型决定,而是由其实例化时的类型决定的。
比如下面这个数组:
它的实际类型就是
Object[]
(大括号的简写法相当于Object[] arr = new Object[] {...};
,因此其实例化类型为Object[]
)。虽然它里面的元素全部都是字符串,按照直觉你可能会觉得可以把它转换为String[]
数组,但其实不然,下面的转换在运行时将会报错:所以这会导致什么问题?如果
Arrays.sort()
声明为接收Comparable[]
数组,那么就要求程序员在使用的时候必须一开始就为该数组实例化为一个Comparable[]
数组或其兼容数组,而不能等到调用sort()
方法的时候再临时转换,因为就像前面的例子那样,这种转换很有可能会失败。