用于枚举类型的约束泛型类型来实现某些接口

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<....>>>>

Pau*_*ora 9

改为声明以下内容:

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是在声明中给出作为其上限类型参数-类型参数的范围包括它自己的声明.

更多信息: