Java泛型进阶之通配符

一.通配符用于解决什么问题

首先给出一个泛型类:

然后写一个静态方法,并在main方法之中进行调用:

可以正常使用func方法并打印出hello

但要是又实例化了其他类型的message,就出现问题了:

所以我们写的这个func方法只能被某些Message成员调用,那该如何解决?

这就要用到通配符 ,即问号。

二.通配符的使用

我们用通配符来修改上述func方法,就不会报错啦:

这里使用通配符“?”描述的是它可以接收任何类型

注意:

由于不确定是什么类型,就无法进行修改:

这是错误的。

三.通配符的上界

1.语法:<?extends 父类>

首先准备如下几个类:

然后进行如下使用

同样,因为不确定?的具体类型,所以不能进行修改:

但是可以接收:

这是发生了向上转型

2.总结:

通配符的上界不能进行写入数据,只可以读取数据

四.通配符的下界

1.语法:<? super 子类>

?可以是子类本身,也可以是其父类

注意,setMessage也可以写为:

因为实例化message时,传入的类型是Food,即T代表food,所以如果传入一个Apple或Banana或Fruit类型的引用,就i是在进行向上转型

2.注意

1.可以修改,但有限制必须是下线自己或其子类:

前三行没问题,后面一行是错的,因为我们知道?代表的是Fruit的父类或Fruit本身,所以setMessage传参时传入Fruit的子类或其本身一定是没有问题的,就是一个向上转型,但不可以传入Food,因为Food是Fruit的父类,如果?表示的就是Fruit本身,那么就会出问题

2.不能简简单单接收数据

这两个都不可以,因为不知道?是哪个父类

除非进行向下转型:

但一般不这样用

3.总结:

通配符的下界,不能进行读取数据,只能写入数据

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值