Wei*_*Lin 7 java generics enums
我有实现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
}
}
Run Code Online (Sandbox Code Playgroud)
让我感到惊讶的是IDE说它在" T extends MyInterface
" 意外受到限制.我不知道这两个字的错误信息意味着什么,有什么解决方案吗?
顺便说一句,出于好奇,我有一个奇怪的问题,虽然不是很重要.枚举类型T可以等效于以下无限循环
<T extends Enum< T extends Enum<T extends<....>>>>
?
改为声明以下内容:
public <T extends Enum<T> & MyInterface> C1(Class<T> enumClz)
Run Code Online (Sandbox Code Playgroud)
在这里,我们声明T
有多个上限,这对于类型参数是可能的.
声明<T extends Enum<T extends MyInterface>>
是无效的语法,因为T
必须与具体类型绑定,但是T extends MyInterface
在type参数中Enum
试图添加有关T
何时声明它的更多信息.
还要注意,在声明多个边界时,类类型必须始终排在第一位.声明<T extends MyInterface & Enum<T>>
也是无效的语法.
顺便说一句,出于好奇,我有一个奇怪的问题,虽然不是很重要.枚举类型
T
可以等效于以下无限循环
<T extends Enum< T extends Enum<T extends<....>>>>
?
声明T extends Enum<T>
已经"无限",因为它是递归的.同样T
是在声明中给出作为其上限类型参数-类型参数的范围包括它自己的声明.
更多信息: