【发布时间】:2014-03-16 12:39:47
【问题描述】:
假设我有两个实现 Foo 接口的枚举类
public enum Enum1 implements Foo {
ENUM1_CONST1,
ENUM1_CONST2;
}
public enum Enum2 implements Foo {
ENUM2_CONST1,
ENUM2_CONST2;
}
如何创建一个方法的类型安全实现,该方法将字符串作为参数,该字符串与枚举常量名称的 any 匹配并返回可以是任何常量的 Foo 实例来自两个枚举定义。
换句话说:
Foo foo1 = holyGrailMethod("ENUM1_CONST1");
Foo foo2 = holyGrailMethod("ENUM1_CONST2");
Foo foo3 = holyGrailMethod("ENUM2_CONST1");
Foo foo4 = holyGrailMethod("ENUM2_CONST2");
【问题讨论】:
-
我认为枚举有一个名为
valueOf的静态合成方法可以做到这一点。不是吗? -
是的,我尝试使用该方法,但例如以下: Enum.valueOf(Foo.class, "ENUM1_CONST1");给出编译错误。
-
你能告诉我们你是如何尝试使用
Enum.valueOf的吗?还有什么错误? -
我首先想到的是:
public Foo holyGrailMethod(@NonNull final String constantString) { return Enum.valueOf(Foo.class, constantString)}。错误是:绑定不匹配:Enum类型的通用方法 valueOf(Class 的有效替代品, String) 不适用于参数 (Class , String)。推断的类型 Foo 不是有界参数 >