class A implements Compareble{ //A行
public void compareTo(){ //B行
.........
}
}
ArrayList<A> list = new ArrayList<A>();
.......
Collections.sort(list);
Collections.binarySearch(list,new A(...)); //报错
为什么使用泛型集合情况时,binarySearch()会报错,但是sort()不会报错
为什么AB行都指定泛型就不报错了。
请大神帮我解答下。
范型参数,代表着你在使用它的时候你就必须给一个类型,不然它怎么知道你是什么类型,不可能在运行期的时候去确定撒,使用范型,只是为了减少代码量。比如一个isnullf方法,不可能为每一种类型都去写这样一个方法撒,所以可以直接给定一个范型,让使用这个方法的人自己判断。其实仅仅是这种,Object也同样可以实现这种功能啊,为什么还要使用范型了。一、Object普通数据类转换需要拆箱装箱,引用数据类型需要进行强制转换,这些都是需要性能的。二、强制转换意味着什么,我们将失去编译期的类型安全。你能百分之百保证你这个Object就一定能转换成某个对象吗。我估计代码量多了,是很难保证的,所以在最好在编译期就给我们提示错误不是更好,所以使用范型,就拥有了编译期的类型安全,你类型不对应,就提示报错,其实这是一种很好的机制。