栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

关于java泛型的点点滴滴

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于java泛型的点点滴滴

相传,在很久以前,list与数组[]在万界山展开殊死大战,这场战斗持续了三天三夜,万界山尘土飞扬,天空中雷鸣电闪,外面的人,只看见那边一团黑,终于,list占了上风,数组[]那怕有通天法力,此刻也不过像一只被猎人射中的鹿,倒在地上,做垂死挣扎,list将剑指向了他,却并不着急杀他,欣赏着他脸上流露出的痛苦,他轻蔑的笑了笑,“属于你的时代已经过去,我将成为世界的法则。”“哼,不就是面向对象。”数组[]冷冷的看着list,随后却轻蔑的笑了笑,“既然你这么自信面向对象的力量,那我就以上神的名义诅咒你,声明的子类集合不能赋值给父类,声明的父类集合不能赋值给子类。”"这",list楞了一下,终于明白了这句话的含义。数组[]看到了list脸上惊恐的神清,狂笑了起来,终于是失去了身体中的所有力气,倒了下去,list木讷的站在那,脸上的骄傲早已荡然无存。

java泛型的一个性质—协变,子类的泛型类型也属于泛型类型的子类,简单来说,就是声明的子类集合不能赋值给父类,声明的父类集合不能赋值给子类。

举个栗子

   public static class cat extends animal {
        public cat(String name) {
            super(name);
        }
    }

    public static class animal {
        String name;

        public animal(String name) {
            this.name = name;
        }
    }

在这里定义了一个动物类,和一个继承了动物类的猫类,如果我定义一个数组,想

 ArrayList animals = new ArrayList();

这样做,或者

       ArrayList animals = new ArrayList();

这样做,都会直接报错,可有时候我们又不得不面临这样的情况。

    public static void addCat(ArrayList a) {
        cat b = new cat("老白");
        a.add(b);
    }

我定义了一个addCat方法,参数是一个cat数组,作用是将一个cat对象加入cat数组中,可我想传入一个animal数组,也实现其中的效果,但如果想直接传递的话,编译器也直接报错,一般的方法是使用方法重载,可是,这样就造成了代码冗余。

得知到这个限制后,list苦心修炼,终于想到了解决办法。代码如下

  public static void addCat(ArrayList a)

在泛型中加入?super,便能打破这一层限制,如果是子类传递给父类的话,只需加入?extends,

这一层限制便不存在了,但是,著名哲学家鲸鲨王说过,当你凝视深渊时,深渊也在凝视着你。(原文出自尼采)

list虽然通过这种方法打破了这种限制,但也给自己套上了另一层枷锁。当然,这都是后话了

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/434745.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号