java泛型 语法_Java泛型中的? super T语法

? super T 语法将泛型类限制为所有T的超类(包括T自身),但只能用于参数中,不可以在返回值用加以限定。

如果不加以限定,假设某个函数头为

? super Manager get()

由于编译器不知道该方法究竟会返回什么类,这样就只能用Object类来接收了。

该语法常用的一个情况是泛型类的比较

java.util.TreeSet 代表一个有序的元素为E的树,它其中的一个构造器需要一个Comparator类来比较两个元素,以E为String类时为例,此时的Comparator可以是Comparator,也可以是Comparator,但Comparator就不行,如何表示这样的限制呢?

jdk源代码中是这样的:

public TreeSet(Comparator super E> c)

这样就保证了传给构造器的Comparator是可以进行E元素的比较的。

另一个例子,java.util.Collections的max方法用于获得一个容器中的最大值,这个函数头可以这样写:

public static >  T max(Collection coll)

这样就限定T为能和自己比较的类,过于严格,jdk源码是这样的:

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifpublicstatic>T max(Collection<?extendsT>coll)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png    Iterator<?extendsT>i=coll.iterator();

d18c02628675d0a2c816449d98bda930.png    T candidate=i.next();

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifwhile(i.hasNext())9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png    T next=i.next();

d18c02628675d0a2c816449d98bda930.pngif(next.compareTo(candidate)>0)

d18c02628675d0a2c816449d98bda930.png        candidate=next;

ecedf933ec37d714bd4c2545da43add2.png    }d18c02628675d0a2c816449d98bda930.pngreturncandidate;

8f1ba5b45633e9678d1db480c16cae3f.png}

很严谨的函数头,但是限定方面比较宽

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值