Java泛型语法——T extends Comparable<? super T>的意思

参考[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);
  1. 说明:Child类没有实现Comparable<Child>,它实现的是 Comparable<Base>
  2. Child类型带入到泛型方法max()中:
    Child extends Comparable<? super Child>
  3. <? super Child> 可以匹配 Base,所以整体匹配
posted @ 2021-05-17 03:05  hj0612  阅读(320)  评论(0编辑  收藏  举报