3

可以将绑定的通用参数编码为:

public <T super Object> void someMethod(T t);

这种界限是否有效?

4

2 回答 2

2

根据 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 中实现,只是没有指定。

于 2013-01-01T01:42:10.540 回答
1

这种较低的债券是完全没有用的。如果您想要一个只能接受 Object 的模板,您所要做的就是删除所有通用模板并使用 Object 作为您的类型直接在您的类中编写代码。

对于 Object 以外的其他类型,它也没有任何意义。为什么你想要一个模板可以接受 A 类型的对象或没有 A 类型的对象(例如 Object),但当 B 是 A 的子类时会拒绝 B 类型的对象?这完全不合逻辑。

与接口的想法相同:您将接受任何根本不实现接口 I 或实现它的类型,但您会拒绝不仅具有接口 I 还扩展了它的类型???

于 2013-01-01T04:04:53.760 回答