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> 都能使用这个方法进行比较,做到了真正的通用性

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

  • 相关阅读:
    图文详解QT布局管理器
    osg中放大缩小模型
    osgearth中XML文档读取报错
    中国河南省洛阳市嵩县黄庄乡红堂村大树芽组
    GIS数据下载整合
    四面体剖分相关开源软件列表
    在你的QT工程中使用ui文件
    对osgAnimation例子的注释的注释
    [debug]调试Release版本应用程序
    链表面试题总结
  • 原文地址:https://www.cnblogs.com/lt123/p/8143796.html
Copyright © 2011-2022 走看看