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