zoukankan      html  css  js  c++  java
  • 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,所以整体匹配
  • 相关阅读:
    面试随缘刷题--day7
    面试随缘刷题--day6
    面试随缘刷题--day5
    面试随缘刷题--day4
    面试随缘刷题--day3 二分专题
    Python 将普通图片转字符画
    相离的圆(排序+二分查找)
    Java利用图灵机器人接口实现简单的聊天程序
    正整数分组(动态规划)
    循环数组最大子段和(动态规划)
  • 原文地址:https://www.cnblogs.com/huangj/p/14775551.html
Copyright © 2011-2022 走看看