【发布时间】:2017-05-24 14:06:44
【问题描述】:
我有一个实现接口的枚举。枚举:
enum MyEnum implements MyInterface {
ONE, TWO, THREE;
@Override
public MyEnum getFirst() {
return ONE;
}
}
界面:
interface MyInterface<T extends Enum<T>> {
T getFirst();
}
我还有一个带边界的泛型类:
class MyClass <T extends Enum<T> & MyInterface> {
private T firstElement;
private Class<T> enumType;
MyClass (Class<T> enumType) {
this.enumType = enumType;
}
}
所以主要思想是将任何enum(实现MyIterface)传递给构造函数,然后使用它的常量。这对我有用。但我也想将第一个元素存储到 firstElement 私有字段中。我试过这样的事情:
firstElement = ((MyInterface)enumType).getFirst();
但仍然没有成功。我无法将java.lang.Class<T> 转换为MyInterface。任何想法如何实现这一目标?提前致谢!
更新:我的问题不在于如何获取第一个枚举常量。我知道.ordinal() 和.values()[0];。我想创建可重用的泛型类并将其与任何枚举一起使用,并由某个接口标记。
好的,不要使用getFirst() 方法。让它成为getDefault()
【问题讨论】:
-
@ΦXocę웃Пepeúpaツ 所有枚举都扩展了该类,它确实有意义:)
-
enumType 是 Class 类型,它不会有你的 enum 方法。只有 MyEnum.ONE、MyEnum.TWO 等可以使用该方法。
-
@niceman 我认为他在这里不需要反射 API,他正试图以一种干净的方式使其通用。
-
@Sikorski hmm OP 缺少
& MyInterface中的 T,如果包含它,我猜firstelement.getFirst()会起作用 -
不要使用原始类型!试试你的代码,但不要使用原始类型。