Java泛型通配符<? extends T>与<? super T>

来源:互联网 发布:淘宝永立旅行箱怎么样 编辑:程序博客网 时间:2024/05/16 10:41

    关键字说明            ●  ? 通配符类型            ●  <? extends T> 表示类型的上界,表示参数化类型的可能是T 或是 T的子类            ●  <? super T> 表示类型下界(Java Core中叫超类型限定),表示参数化类型是此类型的超类型(父类型),直至Object            extends 示例                static class Food{}          static class Fruit extends Food{}          static class Apple extends Fruit{}          static class RedApple extends Apple{}                List<? extends Fruit> flist = new ArrayList<Apple>();          // complie error:          // flist.add(new Apple());          // flist.add(new Fruit());          // flist.add(new Object());          flist.add(null); // only work for null       List<? extends Frut> 表示 “具有任何从Fruit继承类型的列表”,编译器无法确定List所持有的类型,所以无法安全的向其中添加对象。可以添加null,因为null 可以表示任何类型。所以List 的add 方法不能添加任何有意义的元素,但是可以接受现有的子类型List<Apple> 赋值。            Fruit fruit = flist.get(0);            Apple apple = (Apple)flist.get(0);            由于,其中放置是从Fruit中继承的类型,所以可以安全地取出Fruit类型。            flist.contains(new Fruit());            flist.contains(new Apple());            在使用Collection中的contains 方法时,接受Object 参数类型,可以不涉及任何通配符,编译器也允许这么调用。            super 示例            List<? super Fruit> flist = new ArrayList<Fruit>();            flist.add(new Fruit());            flist.add(new Apple());            flist.add(new RedApple());            // compile error:            List<? super Fruit> flist = new ArrayList<Apple>();            List<? super Fruit> 表示“具有任何Fruit超类型的列表”,列表的类型至少是一个 Fruit 类型,因此可以安全的向其中添加Fruit 及其子类型。由于List<? super Fruit>中的类型可能是任何Fruit 的超类型,无法赋值为Fruit的子类型Apple的List<Apple>.            // compile error:            Fruit item = flist.get(0);            因为,List<? super Fruit>中的类型可能是任何Fruit 的超类型,所以编译器无法确定get返回的对象类型是Fruit,还是Fruit的父类Food 或 Object.            小结            extends 可用于的返回类型限定,不能用于参数类型限定。            super 可用于参数类型限定,不能用于返回类型限定。            带有super超类型限定的通配符可以向泛型对易用写入,带有extends子类型限定的通配符可以向泛型对象读取。——《Core Java》  

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 受伤牙齿脱落后怎么办 一岁多宝宝牙齿脱落怎么办 老年人门牙掉了怎么办 老年人磨牙掉了怎么办 种植牙牙龈发炎怎么办 种植牙牙龈红肿怎么办 种植牙后牙龈怎么办 种植牙牙龈感染怎么办 种植牙牙龈向上怎么办 上门牙有点突出怎么办 电脑语音电流声怎么办 麦克风说不了话怎么办 耳机说不了话怎么办 饿了么小休超时怎么办 美团清退代理商怎么办 小孩龟头肿很大怎么办 16岁不想上学怎么办 宜宾南门桥逆行怎么办 去加拿大探亲签证怎么办 重庆两路口到菜坝园怎么办 摄像头uid忘了怎么办 电梯钢丝绳断了怎么办 在小区车被砸了怎么办 甲米天气下雨怎么办 电影院不开空调怎么办 电脑总弹广告怎么办 下雨天了怎么办神接 天下雨了怎么办套路 下雨天了怎么办 新套路 万达兑换券过期怎么办 直播间没一个人怎么办 快手直播人少怎么办 快手直播人气少怎么办 被火山主播踢出房间怎么办 遇到同事的排挤怎么办 交警处理事故不公平怎么办 派出所处理事情不公平怎么办 淘宝号不健康了怎么办 作业盒子忘记密码怎么办 一起作业忘记密码怎么办 手机不能录视频怎么办