java - 枚举类型的约束泛型类型以实现某些接口(interface)

标签 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
    }
}

令我惊讶的是 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 MyInterfaceEnum 的类型参数中正在尝试添加有关 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/

相关文章:

java - 在 Eclipse 中创建 Runnable jar 时出错

java - 如何扩展 afterPropertiesSet() 方法

c# - 将 params 关键字与动态类型参数一起使用

java - Morphia 无法将类插入数据库

swift - 在枚举中使用泛型函数

java - 使用 SQL 连接保护数据库密码

java - 这个 'intermediary' 模式的名称是什么?

c# - 列出从 child 到 parent 的分配

generics - 如何直接使用泛型函数定义一个新的Fortran过程?

enums - 如何使用毯式Into trait实现转换回原始类型?