我知道实现MyInterface。 在使用该枚举创建其他类时,我想将enumClz约束为已实现MyInterface的类。
所以我在一般类型声明中将签名描述为“T extends Enum< T extends MyInterface>
”。
public <T extends Enum< T extends MyInterface>> C1( Class<T> enumClz) {
for (T anEnumConst : enumClz.getEnumConstants()) {
//....process
}
}
让我感到惊讶的是IDE说它在“T extends MyInterface
”处“意外受限”。
我不知道这两个字的错误信息意味着什么,关于这个的任何解决方案?
顺便说一句,出于好奇,我有一个奇怪的问题,虽然不是很重要。 枚举类型T可以等效于以下无限循环
<T extends Enum< T extends Enum<T extends<....>>>>
?
答案 0 :(得分:9)
声明以下内容:
public <T extends Enum<T> & MyInterface> C1(Class<T> enumClz)
在这里,我们声明T
有多个上限,这对于类型参数是可能的。
声明<T extends Enum<T extends MyInterface>>
是无效的语法,因为T
必须与具体类型绑定,但T extends MyInterface
的类型参数中的Enum
正在尝试添加更多信息当它已经被宣布时约为T
。
另请注意,在声明多个边界时,必须始终首先使用类类型。声明<T extends MyInterface & Enum<T>>
也是无效的语法。
顺便说一句,出于好奇,我有一个奇怪的问题,虽然不是很重要。枚举类型
T
可以等效于以下无限循环
<T extends Enum< T extends Enum<T extends<....>>>>
?
声明T extends Enum<T>
已经是“无限”,因为它是递归。声明的相同T
作为其上限的类型参数给出 - 类型参数的范围包括其自己的声明。
更多信息: