【问题标题】:Constraint generic type for enum type to implement some interface约束枚举类型的泛型类型以实现某些接口
【发布时间】:2013-10-29 04:10:56
【问题描述】:

我有实现 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能否等价于下面的无限循环

&lt;T extends Enum&lt; T extends Enum&lt;T extends&lt;....&gt;&gt;&gt;&gt;?

【问题讨论】:

  • @alfasin extends 在泛型边界中使用时表示“是、扩展或实现”。

标签: java generics enums


【解决方案1】:

改为声明以下内容:

public <T extends Enum<T> & MyInterface> C1(Class<T> enumClz)

在这里,我们声明 T 有多个上限,这对于类型参数是可能的。

声明&lt;T extends Enum&lt;T extends MyInterface&gt;&gt; 是无效语法,因为T 必须与具体类型绑定,但Enum 的类型参数中的T extends MyInterface 正在尝试添加更多关于T 的信息,但它已经存在声明。

还请注意,在声明多个边界时,类类型必须始终位于首位。 &lt;T extends MyInterface &amp; Enum&lt;T&gt;&gt; 的声明也是无效的语法。

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

&lt;T extends Enum&lt; T extends Enum&lt;T extends&lt;....&gt;&gt;&gt;&gt;?

声明T extends Enum&lt;T&gt; 已经是“无限的”,因为它是递归的。被声明的同一 T 被作为其上限的类型参数给出 - 类型参数的范围包括它自己的声明。

更多信息:

【讨论】:

  • java 6 支持符号&amp; 吗?
猜你喜欢
  • 1970-01-01
  • 2015-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-16
  • 1970-01-01
  • 1970-01-01
  • 2014-05-07
相关资源
最近更新 更多