zoukankan      html  css  js  c++  java
  • <T extends Comparable<T>>和<T extends Comparable<? super T>>含义

    <T extends Comparable<T>>表明T实现了Comaprable<T>接口,此条件强制约束,泛型对象必须直接实现Comparable<T>(所谓直接就是指不能通过继承或其他方式)

    <T extends Comparable<? super T>> 表明T的任意一个父类实现了Comparable<? super T>接口,其中? super T表示 ?泛型类型是T的父类(当然包含T),因此包含上面的限制条件,且此集合包含的范围更广

    案例如下

      

       //    有限制的泛型  只允许实现Comparable接口的参数类型
    //    从集合中找出最小值
        public static <T extends Comparable<T>> T min(List<T> list) {
            Iterator<T> iterator = list.iterator();
            T result = iterator.next();
            while (iterator.hasNext()) {
                T next = iterator.next();
                if (next.compareTo(result) < 0) {
                    result = next;
                }
            }
            return result;
        }
    
        //    <T extends Comparable<? super T>> 限制
    //    此方法 多一个 ? super T 约束 表明可以是T或者T的某个父类实现Comparable接口
        public static <T extends Comparable<? super T>> T min2(List<T> list) {
            Iterator<T> iterator = list.iterator();
            T result = iterator.next();
            while (iterator.hasNext()) {
                T next = iterator.next();
                if (next.compareTo(result) < 0) {
                    result = next;
                }
            }
            return result;
        }
    

      Dog.java

    package com.effectJava.Chapter2;
    public class Dog extends Animal {
        private int age;
        private String name;
        private String hobby;
    
        public Dog(int id,int age, String name, String hobby) {
            super(id);
            this.age = age;
            this.name = name;
            this.hobby = hobby;
        }
        public void setName(String name) {
            this.name = name;
        }
    
        public void setHobby(String hobby) {
            this.hobby = hobby;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public String getHobby() {
            return hobby;
        }
    
        public int getAge() {
            return age;
        }
    }
    

      Animal.java

    package com.effectJava.Chapter2;
    
    public class Animal implements Comparable<Animal> {
    
        //    唯一标识动物的id
        protected int id;
    
        public Animal(int id) {
            this.id = id;
        }
    
        public Animal() {
    
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public int getId() {
            return id;
        }
    
        @Override
        public int compareTo(Animal o) {
            return this.getId() - o.getId();
        }
    }
    

      运行main函数

      List<Dog> dogs = new ArrayList<>();
            dogs.add(new Dog(1, 1, "1", "1"));
            dogs.add(new Dog(2, 2, "2", "2"));
            dogs.add(new Dog(3, 3, "3", "3"));
    //        编译错误 由于Dog没有直接实现Comparable<Dog>接口
            min(dogs);
    //        由于Dog父类Animal实现了Comparable<Dog>接口
            min2(dogs);
    

      

  • 相关阅读:
    【转】Android中设置TextView的颜色setTextColor
    【转】android颜色对应的xml配置值
    【转】color颜色十六进制编码大全
    【转】Usage of sendBroadcast()
    【转】Android4.3 蓝牙BLE初步
    【转】android中重复连接ble设备导致的连接后直接返回STATE_DISCONNECTED的解决办法---不错不错,重新连接需要花费很长的时间
    【转】推荐--《Android深入浅出》----不错
    【转】google chrome如何设置主页
    【转】Chrome保存mhtml网页文件的方法 – 无需任何插件,完美!
    【转】Android--广播BroadcastReceiver
  • 原文地址:https://www.cnblogs.com/09120912zhang/p/8319899.html
Copyright © 2011-2022 走看看