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中onBackPressed()的使用
    Python初次学习
    svn Mac下面无法更新png
    UIView的layoutSubviews和drawRect
    "_deflate", referenced from: -[NSData(NSDataAdditions) gzipDeflate] in NSDataAdditions.o
    Error12
    pods安装
    xib为view添加边框
    这些机型将被淘汰
    Development cannot be enabled while your device is locked.
  • 原文地址:https://www.cnblogs.com/09120912zhang/p/8319899.html
Copyright © 2011-2022 走看看