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

时间:2013-10-29 04:10:57

标签: 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”处“意外受限”。 我不知道这两个字的错误信息意味着什么,关于这个的任何解决方案?


顺便说一句,出于好奇,我有一个奇怪的问题,虽然不是很重要。 枚举类型T可以等效于以下无限循环

<T extends Enum< T extends Enum<T extends<....>>>>

1 个答案:

答案 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作为其上限的类型参数给出 - 类型参数的范围包括其自己的声明。

更多信息: