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