JAVA泛型注意点

java泛型

     *泛型运用的时候应该注意两种情况,一般,也是这么建议使用的
     * 1.使用泛型时:? extends T
     *  我们只知道容器原本存放的是T和子类
     * 同时设置了上限,不能通过add添加数据,但是可以获取数据给父类及其子类。
     * 注意:d但是并不能够通过add对其中进行添加元素,先记住,等下说为什么。但是可以获取其中的元素

? extends T

//存放student类型的集合
        ArrayList<Student> students1 = new ArrayList<>();
        //存放几个数据
        students1.add(new Student());
        students1.add(new Student());
        students1.add(new Student());
        students1.add(new Student());



        //注意这里添加Student类型
        List<? extends People> people1 =students1;
        //给people1添加数据
        People people = new People();
        people1.add(people);//会报错
        Student student = new Student();
        people1.add(student);//会报错
        //获取people1的数据
        People people2 = people1.get(0);
        Student student1 = people1.get(1);//会报错

总结 ? extends T

     *
     * 就像我上面所说,? extends T
     * 的集合只能够存放子类及其本身,在存取上,只能在初始的时候存放,取得时候只能赋值给最高父类
     * 通过上面的内容,我们不难看出原因,为什么不能够存放呢?
     * 因为我们并不知道里面可以放什么People,男人?还是女人?我们不知道放的是什么,所以不能够放再继续放元素
     * 就是说,设置了上限,比他高的肯定放不了,比他低的我们并不知道低到什么情况,所以干脆不让他添加了。
     * 为什么能够取元素呢?
     * 因为我们虽然不知道里面存放的是哪种People,男人?还是女人?但是我们知道我们取出来一定是People(人),
     * 不管取出来的是父类类型,还是子类类型,都可以给父类,如果是子类,就相当于多态写法
     */

? super T

     *泛型运用的时候应该注意两种情况,一般,也是这么建议使用的
     * 2.使用泛型时:? super T
     * 设置了下限
     * 注意:能够通过add对其中进行添加元素子类及其本身类型,先记住,等下说为什么。
     * 获取其中的元素的时候只能将其赋值给Object,为什么呢?带着这个疑问往下看。
 //存放student类型的集合
        ArrayList<People> people4 = new ArrayList<>();
        //存放几个数据
        people4.add(new People());
        people4.add(new People());
        people4.add(new People());
        people4.add(new People());


        ArrayList<? super People> People5=people4;
        People5.add(new Student());
        People5.add(new People());
        //看到没,报错了,不能把获取的数据给子类和本身,存放的是People都不能给,
        // 当然,更加不能给子类啦
       People people5=People5.get(1);//会报错
        Object object = People5.get(0);

总结 ? super T

     * 咋们来说一下,为什么能够add添加子类及其本身类型元素
     * <? super People>我们只知道,容器原本放的是People及其父类类型
     *假如原本是Animal类型还好,可以存Animal,但是如果是People就不能存放Animal。
     * 低的类型肯定能放进去,但是高的并不知道高到什么情况,所以干脆也不让放了
     * 而对于本身和子类我们可以保证添加进去的绝对满足可存放的要求即比原本容器低,可以转换
     * 不能获取的原因是:由于不知道你获取得到的是什么类型,所以如果要获取只能赋值给Object.
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值