通配符的超类型限定

阐述

与<? extends myClass & myInterface>不同,这是在继承体系中指定上界

<? super myClass>这是指定下界,指定?必须是myClass的超类型或其本身。

这并不是Java的语法,而是展示编译器知道什么。

将其作为方法参数时,编译器无法知道传入的是myClass的哪个父类。所以无法传入,只能传入myClass或者其子类(毕竟用myClass引用其子类是安全的)

将其作为返回类型时,不能保证返回对象的类型,所以只能用一个Object类的对象变量是合适的。

总结

带有超类型限定的通配符允许你写人一个泛型对象,而带有子类型限定的通配符允许你读取一个泛型对象。
 


嵌套问题

LocalDdte 实现了 ChronoLocalDate, 而 ChronoLocalDate 拓展了Comparable<ChronoLocalDate>。 因此,LocalDate 实现的是 Comparable<ChronoLocalDate> 而不是 Comparable<LocalDate>,故

public static <T extends Comparable<T>> Pair<T> minmax(T[] a);不行。

。 在这种情况下,可以利用超类型来解决:

public static <T extends Comparable<? super T>> Pair<T> minmax(T[] a)

如何解决呢?

T必须是实现Comparable<? super T>接口的,而Comparable<? super T>的泛型参数又必须是T的超类。假定T是LocalDate,那么LocalDate必须实现Comparable<? super LocalDate>,那? super LocalDate是什么呢?可以是Comparable<ChronoLocalDate>,故这样不会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值