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

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

  • 相关阅读:
    Python将文本生成二维码
    Python 发送邮件
    北京地铁月度消费总金额计算(Python版)
    将w3cplus网站中的文章页面提取并导出为pdf文档
    [开发笔记]-MarkDown语法
    linux多版本php安装+采坑指南
    浏览器跨域暴力解决
    php7使用xhprof测试php性能
    vscode使用xdebug断点调试php代码(无论win还是linux)
    ghostscript之pdf处理
  • 原文地址:https://www.cnblogs.com/lt123/p/8143796.html
Copyright © 2020-2023  润新知