做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
,原来用到这儿了。
真是又学到了,以想想什么场景需要用到这样的定义。