我对以下两个方法声明感到困惑:
private <U, T extends U> T funWorks(T child, U parent) {
// No compilation errors
}
private <T, U super T> T funNotWorks(T child, U parent) {
// compilation errors
}
上述两种情况都不应该有效吗?通过类比如果U是T的父,那么T是U 的子项。那为什么第二个会出现编译错误?
EDIT ::
我认为,T extends T
和T super T
都是有效的。对吗?
答案 0 :(得分:7)
TypeParameter:
TypeVariable TypeBoundopt
TypeBound:
extends TypeVariable
extends ClassOrInterfaceType AdditionalBoundListopt
AdditionalBoundList:
AdditionalBound AdditionalBoundList
AdditionalBound
AdditionalBound:
& InterfaceType
extends
或super
(JLS #4.5.1):TypeArguments:
< TypeArgumentList >
TypeArgumentList:
TypeArgument
TypeArgumentList , TypeArgument
TypeArgument:
ReferenceType
Wildcard
Wildcard:
? WildcardBoundsopt
WildcardBounds:
extends ReferenceType
super ReferenceType
答案 1 :(得分:2)
您无法使用super绑定命名泛型。另请参阅this stackoverflow发布。