ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java-[泛型:? extends T 与 ? super T]

2022-07-11 16:37:30  阅读:147  来源: 互联网

标签:Java 子类 元素 List add 添加 l2 泛型 extends


泛型:? extends T 与 ? super T

 

java的一个设计理念是,与泛型相关的异常最好是在编译期间就被发现,因此设计了extends与super这两种方式。

具体来说,List<? extends T>表示该集合中存在的都是类型T的子类,包括T自己。
而List<? super T>表示该集合中存的都是类型T的父类,包括T自己。

List<? extends T>如果去添加元素的时候,因为list中存放的其实是T的一种子类,如果我们去添加元素,其实不知道到底应该添加T的哪个子类,这个时候桥接方法在进行强转的时候会出错。但是如果是从集合中将元素取出来,我们可以知道取出来的元素肯定是T类型。所以? extends T这种方式可以取元素而不能添加,这个叫get原则。

List<? super T>因为存的都是类型T的父类,所以如果去添加T类或者T类子类的元素,肯定是可以的。但是如果将元素取出来,则不知道到底是什么类型,所以? super T可以添加元素但是没法取出来,这个叫put原则。


    public static void test() {
        List<? extends Number> l1 = new ArrayList<>();
        // l1.add(1); 会报错

        List<? super Number> l2 = new ArrayList<>();
        // Number n = l2.get(1); 会报错
        l2.add(1);
        l2.add(2);
        l2.add(0.11);
        for(Object n: l2) {
            System.out.println(n.toString());
        }
    }

 

 

标签:Java,子类,元素,List,add,添加,l2,泛型,extends
来源: https://www.cnblogs.com/whoknows1/p/16466870.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有