参考[https://www.cnblogs.com/cherryljr/p/6880657.html](樱の空 Java泛型的应用——T extends Comparable<? super T>)
1. <T extends Comparable>
表示:T 是一种数据类型,必须实现 Comparable 接口,且必须可以与相同类型的元素进行比较。例如:Integer
(类型T必须实现Comparable接口,并且Comparable这个接口的类型参数是T。这样,T的实例之间才能相互比较大小)
public final class Integer extends Number implements Comparable<Integer>
2. <T extends Comparable<? super T>>
表示:T要实现Comparable接口,并且T的父类要实现Comparable
(类型T必须实现Comparable接口,并且Comparable这个接口的类型参数是T或者是T的任一父类。这样声明后,T的实例之间和T的父类的实例之间可以相互比较大小)
public class Base implements Comparable<Base>{
private int sortOrder;
public Base(int sortOrder) {
this.sortOrder = sortOrder;
}
@Override
public int compareTo(Base o) {
if(sortOrder < o.sortOrder){
return -1;
}else if(sortOrder > o.sortOrder){
return 1;
}else{
return 0;
}
}
}
public class Child extends Base {
public Child(int sortOrder) {
super(sortOrder);
}
}
// 方法
public static <T extends Comparable<? super T>> T max(List<T> arr){
T max = arr.get(0);
for(int i=1; i<arr.size(); i++){
if(arr.get(i).compareTo(max)>0){
max = arr.get(i);
}
}
return max;
}
// 调用
List<Child> childs = new ArrayList<Child>();
childs.add(new Child(20));
childs.add(new Child(80));
Child maxChild = max(childs);
- 说明:Child类没有实现
Comparable<Child>
,它实现的是Comparable<Base>
- 把Child类型带入到泛型方法max()中:
Child extends Comparable<? super Child>
<? super Child>
可以匹配Base
,所以整体匹配