关于泛型作为方法参数

关于泛型作为方法参数

老师,public void sellGoods(List<? super Goods>goods)中的super没有讲过吧     前面我们学的不是extends吗,这里放super代表什么意思

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕阿莹 2020-08-10 15:39:18

同学你好

例如B继承自A

则List<? super A> 可以声明A类型的集合,但不能声明A类型的子类类型的集合

List<? extends A>可以接收A类型的集合,以及A类型的子类类型的集合

如下图代码所示:

http://img1.sycdn.imooc.com//climg/5f30f9280994603507600327.jpg

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 慕沐1462760 #1
    接收跟添加不是一样的吗,都是往集合里面存数据
    2020-08-10 15:42:17
  • 好帮手慕阿莹 回复 提问者 慕沐1462760 #2
    在List<? super T> 和List <? extends T> 这里还是 有些区别的,List <? extends T>被设计出来用来接收指定类型的数据,不能调用add()方法添加,一般可以用来接收返回值。 ,List<? super T>一般是初始化 一个空的集合,往里add数据。但用的不太多,同学这里了解就可以的。 祝学习愉快~
    2020-08-10 15:47:01
好帮手慕阿莹 2020-08-07 17:25:47

同学你好

List<? super T>是被设计用来添加数据的泛型,并且只能添加T类型或其子类类型的元素。

super代表的是父类是T

例如:

A是父类,B是继承A类的子类

List<? super A>  list = new ArrayList<>();
list.add(A类型对象);
list.add(B类型对象);

它和 List<? extends T> 的区别是:

List<? extends T>被设计用来读数据的泛型,只能读取类型为T或其子类型的元素。

不能添加数据,没有add方法。

它可以用来接收定义好的指定类型的集合,例如

List<? extends A>  list = new ArrayList<A或B>();

然后可以调用get方法,获取里边的元素,但是无法添加到list中。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!




  • 提问者 慕沐1462760 #1
    能接收定义好的指定类型的对象吗
    2020-08-10 15:22:30
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师