本文主要是介绍java:Multiple Bounds--类型变量(TypeVariable)定义的高级用法--<A extends ClassAIfAIfB >,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
做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
的子类,还要实现IfA
和IfB
接口
所以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》
这篇关于java:Multiple Bounds--类型变量(TypeVariable)定义的高级用法--<A extends ClassAIfAIfB >的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!