我有实现 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
”处“意外绑定(bind)”。
我不知道这两个字的错误信息是什么意思,有什么解决办法吗?
顺便说一句,出于好奇,我有一个奇怪的问题,虽然不是很重要。 枚举类型 T 是否可以等效于以下无限循环
<T extends Enum< T extends Enum<T extends<....>>>>
?
最佳答案
声明如下:
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>>
的声明也是无效语法。
And by the way, out of curious I have an odd question though not really important. Can an enum type
T
be equivalent to the following infinite loop
<T extends Enum< T extends Enum<T extends<....>>>>
?
声明T extends Enum<T>
因为它是递归的,所以已经是“无限的”了。同T
被声明的是作为其上限的类型参数给出的 - 类型参数的范围包括其自己的声明。
更多信息:
关于java - 枚举类型的约束泛型类型以实现某些接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19649510/