Object的通用下限
可以将通用参数编码为:
public void someMethod(T t);
是否有这种约束的有效用法?
根据JLS http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.4 ,类型参数(
TypeParameter: TypeVariable TypeBound* TypeBound: extends TypeVariable extends ClassOrInterfaceType AdditionalBoundList* AdditionalBoundList: AdditionalBound AdditionalBoundList AdditionalBound AdditionalBound: & InterfaceType
* =可选
你看到TypeBound
,只有指定的extends
的用法。 不幸的是,没有指定使用super
的下界类型参数。 仅在通配符用法中指定下限( JLS#4.5.1 )
好问题,让我深入挖掘JLS,我不知道为什么这没有在java中实现,它只是没有指定。
这种较低的键完全没用。 如果您想拥有一个只能接受Object的模板,您所要做的就是使用Object作为类型直接删除所有通用模板和代码。
对于除Object以外的其他类型,它既没有任何意义。 为什么你想要一个接受类型A的对象的模板或没有类型A(例如Object)的对象,但是当B是A的子类时,它会拒绝类型B的对象? 这完全是不合逻辑的。
与接口相同的想法:你会接受任何没有实现接口的类型或实现它但是你会拒绝一个不仅具有接口I而且已经扩展它的类型?