2013-10-29 114 views
7

我有enum实现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<....>>>>

+0

@alfasin'extends'中通用范围使用时意思是 “是,或延伸,或工具”。 –

回答

9

声明如下代替:

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>>也是无效的语法。

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

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

声明T extends Enum<T>已经是“无限的”,因为它是递归。正在声明的T与其上限的类型参数一样 - 类型参数的作用域包含自己的声明。

的更多信息:

+0

java 6中符号'&'是否支持? – Cherry

相关问题