此API规定实体bean要实现comparable接口并重写compareTo方法,为什么不将API改为Arrays.sort(Compatable[] com)呢?
2 回答
胡子哥哥
TA贡献1825条经验 获得超6个赞
写成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]
RISEBY
TA贡献1856条经验 获得超5个赞
真正的原因是因为Java数组的一个特性导致不得不这样设计。简单来说,Java数组的运行时类型不是由其元素类型决定,而是由其实例化时的类型决定的。
比如下面这个数组:
Object[] arr = { "hello", "world"};它的实际类型就是Object[](大括号的简写法相当于Object[] arr = new Object[] {...};,因此其实例化类型为Object[])。虽然它里面的元素全部都是字符串,按照直觉你可能会觉得可以把它转换为String[]数组,但其实不然,下面的转换在运行时将会报错:
String[] arr2 = (String[]) arr;
注:如果反过来,将一个String[]数组转换为Object[]数组则是可行的,因为前者是后者的子类型。
所以这会导致什么问题?如果Arrays.sort()声明为接收Comparable[]数组,那么就要求程序员在使用的时候必须一开始就为该数组实例化为一个Comparable[]数组或其兼容数组,而不能等到调用sort()方法的时候再临时转换,因为就像前面的例子那样,这种转换很有可能会失败。
- 2 回答
- 0 关注
- 426 浏览
添加回答
举报
0/150
提交
取消
