【发布时间】:2014-06-18 22:32:39
【问题描述】:
我正在尝试存储和检索枚举类,以便以后可以找到正确的类型(基于配置)并在其上调用 ValueOf 以解析字符串。如何放置/获取然后调用 ValueOf?
在伪代码中它看起来像这样:
enum MyType { VAL1, VAL2 };
enum MyColors { BLUE, RED };
Map<String, Class> map = Maps.newHashMap();
map.put("key1", MyType.class); //this is the MyType enum above
map.put("colors", MyColors.class); //this is the MyColors enum above
...
String inputType = "colors";
String inputValue = "BLUE";
Class c = map.get(inputType);
assertEquals(MyColors.BLUE, c.ValueOf(inputValue)); //here I want MyColors.ValueOf() to get called
Class c2 = map.get("key1");
assertEquals(MyType.VAL1, c.ValueOf("VAL1")); //here I want MyType.ValueOf() to get called
我该怎么做?
为了说明我为什么这样做的一些背景 - 我有多种这样的枚举类型,我得到一个输入,告诉我它是什么类型的枚举(在文本中)和枚举中的一个值,所以我想要从地图中查找枚举类,然后调用它上面的静态 ValueOf 将正确解析。
注意 - 我不想在地图中存储 MyType 对象,我想存储类引用
谢谢!
【问题讨论】:
-
为什么要这样做?如果你事先不知道它是哪个 Enum 类,你期望如何使用它?
-
我不知道
MyMap是什么。Class没有ValueOf或valueOf方法,所以我不明白你在做什么。如果c是MyMap.class,而我不知道MyMap是什么,我什至无法猜测c.valueOf("VAL1")会做什么。 -
我已经更新了一些说明和更多示例 - 请让我知道还有什么可以使这一点更清楚(尤其是您的反对者)
-
@ajb,MyType 是一个枚举; MyTypel.class 应该是对该枚举类的引用;然后 c 应该再次成为该参考; c.ValueOf("VAL1") 应该相当于做 MyType.ValueOf("VAL1") 除非我不知道我的哪个枚举是所以我在地图中查找它
-
@durron597,我已经提供了一些细节,但基本上我正在尝试处理一些用户输入并将其转换为几种不同类型的枚举。在这一点上,我什至只是在语法上很好奇你是如何在 Java 中做到这一点的