java:Multiple Bounds--类型变量(TypeVariable)定义的高级用法--<A extends ClassA&IfA&IfB >

做Java开发工作好多年了。今天偶然翻到 java.lang.TypeVariable的源码,好奇为什么 TypeVariable.getBounds()返回类型是个数组。
一般不都是<T extends Number> 这样用码?T难道还能extends多个类型?

同问:不应该是extend,为什么要加个s当复数?

带着问题一通找,最终找到了Oracle官方文档:《Bounded Type Parameters》

才知道类型变量定义还有Multiple Bounds的概念,说明如下:
在这里插入图片描述
如下示例:ServiceD定义了A类型变量–<A extends ClassA&IfA&IfB >,就要求A不仅要是ClassA的子类,还要实现IfAIfB接口

所以ClassC才能满足这个要求,

	public static class ClassA{}
	public static interface IfA{}
	public static interface IfB{}
	public static class ServiceD<A extends ClassA&IfA&IfB >{
	}
	public static class ClassC extends ClassA  implements IfA,IfB{}
	public static class ServiceE extends ServiceD<ClassC>{
	}

终于明白为什么继承关键字是extends而不是extend,原来用到这儿了。
真是又学到了,以想想什么场景需要用到这样的定义。

参考资料

《Bounded Type Parameters》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

10km

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值