java泛型通配符的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java泛型通配符的问题相关的知识,希望对你有一定的参考价值。
为什么B的子类C可以放进去,父类A却不行?
<? super B>是说B或B的父类?
你的List<? super B> list = new ArrayList<>();这句赋值出现了警告是因为你将一个原生的ArraylList引用传递给有限制的List,改成这样List<? super B> list = new ArrayList<A>();警告就消失了
那么为什么不能在其中放入A的实例呢,因为你将ArrayList<A>转型为ArrayList<? super B>,编译器会认为这个list中存放的是某一个B类的父类的实例,但不能确定是A,所以你传入A会出错,但是你传入B或C的实例呢,起码可以保证它是一个B,那就肯定没错了。 参考技术A 首先<? super B>表示的是B或者B的父类。
你的List<? super B> list = new ArrayList<>();这句赋值出现了警告是因为你将一个原生的ArraylList引用传递给有限制的List,改成这样List<? super B> list = new ArrayList<A>();警告就消失了
那么为什么不能在其中放入A的实例呢,因为你将ArrayList<A>转型为ArrayList<? super B>,编译器会认为这个list中存放的是某一个B类的父类的实例,但不能确定是A,所以你传入A会出错,但是你传入B或C的实例呢,起码可以保证它是一个B,那就肯定没错了。 参考技术B <? super B>是通配B自己以及父类为B的类,所以B的父类不行
你用<? super A>就3个都可以了可以追问
就是说,表示B的实例或者其子类的实例?
追答是的
参考技术C 同问 我也不是很懂以上是关于java泛型通配符的问题的主要内容,如果未能解决你的问题,请参考以下文章