zoukankan      html  css  js  c++  java
  • 通过 T extends Comparable<? super T> 理解泛型边界

    public class Animal implements Comparable<Animal>{
    
            private String name;
            public String getName() {
                return name;
            }
            public void setName(String name) {
                this.name = name;
            }
            @Override
            public int compareTo(Animal o) {
                // TODO Auto-generated method stub
                return 0;
            }
    }

    定义一个Animal类,实现Comparable方法

    问题1:implements Comparable<Animal> 和implements Comparable  有什么区别

      如果携带类型参数<Animal>那么 就限定了Animal对象只能和Animal对象比较,如果和其他对象比较,在编译阶段就会出错,不携带类型参数<Animal>当然也不会出错,但是Animal对象和其他类型对象比较毫无意义,且容易出错。

    编译阶段就能预防错误。。

    public class Dog extends Animal{
        private String name;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }

    定义一个Dog类,是Animal对象的子类,由于Animal对象已经实现了Comparable接口,因此,Dog类就不能再次实现Comparable<Dog>接口

      编译时出错。。

    可以直接使用Animal类的compare(Animal)方法

    定义一个通用的排序方法

    这三个方法都没问题,但是第三个方法使用了泛型,通常采用

    但是第三种方法类型参数T 必须实现Comparable接口,因此Dog类型是不能使用此方法的

    如何解决?

     Comparable<? super T> 使用父类方法比较子类型 

    这样无论是List<Dog> List<Animal> 都能使用这个方法进行比较,做到了真正的通用性

    在非泛型类的泛型方法中,没什么区别

  • 相关阅读:
    1009 说反话 (20)
    1008 数组元素循环右移问题 (20)
    1007 素数对猜想(20 分)
    1006 换个格式输出整数 (15)
    PAT 1005 继续(3n+1)猜想 (25)
    PAT 1004 成绩排名 (20)
    PAT 1003 我要通过!(20)
    PAT 1002 写出这个数 (20)(20 分)
    PAT 1001 害死人不偿命的(3n+1)猜想 (15)
    人口普查(20) PAT
  • 原文地址:https://www.cnblogs.com/lt123/p/8143796.html
Copyright © 2011-2022 走看看