发布网友 发布时间:2022-05-11 00:33
共1个回答
热心网友 时间:2023-11-19 10:19
这是因为binarySearch的第一个参数类型是:追答——“也就是一个实现了Comparable接口的类T”这句不太懂
之前的表述不太清楚,我重新尝试解释一下吧。binarySearch有一个显示的泛型参数T,和两个参数,第二个参数是T类型,这就决定了整个方法的泛型参数。你传的是Student类型,所以T在这里无疑是Student类
binarySearch的第一个参数是List>,而你传的是List,所以Student就代替了上面的第一个问号,也就是说Student类必须满足extends Comparable 这个条件,即Student类要实现Comparable接口。
注意的是这里的Comparable是有泛型的,也就是必须存在一个类U来代替上面Comparable泛型中的问号参数,并且U是T的父类(super你可以这样字面理解,但是准确的说应该是T类型的对象可以转换成U类型的对象,意味着T是U的子类,包括间接子类;或者T实现了U接口;或者T是U本身)。在这里,T是Student,所以U必须是Student的父类之一,或者Student实现的接口,或者Student本身
现在你的Student确实实现了Comparable,但实现的是没有泛型的Comparable接口。你必须实现有泛型的。比如你可以让Student implements Comparable,这样我说的U就是Student本身,调用没有问题。你也可以让Student implements Comparable,这样U就是Object,而Object是Student的父类,这样也没有问题。
——还有泛型能继承和覆盖吗?
这个问题是想说List继承List吗?不是,它们没有继承关系。所以List类型的对象不能传给List类型的参数。你必须把参数类型定义成List才能接受List类型的对象。