【发布时间】:2011-11-17 20:55:48
【问题描述】:
免责声明:我不会说我是最有经验的 Java 人。可以有更简单的方法来做我在我的例子中所做的事情。但这是一个关于将字符串条目转换为 Enum 类而不是 enum 变量的问题。我尽量解释清楚。
这是我想做的一个简单版本。我将有两个不同的枚举,我想根据用户的需要选择一个或另一个。这方面的例子,在代码中,将是
public enum Letters {
A, B, C, D, E, ... , X, Y, Z
}
public enum Numbers {
ONE, TWO, THREE, ..., EIGHT, NINE, TEN
}
public static void main(String [] args) {
System.out.println("Enter in you choice, letters (Letters) or numbers(Numbers)");
String entry = "";
InputStreamReader input = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(input);
try {
entry = reader.readLine();
}
catch(Exception e){};
...
}
我想让用户这样,如果他输入“字母”,它将能够获取字符串条目并将其转换为对字母枚举的变量引用。省略号是代码的占位符。我想最终使用它,以便我可以使用
for (answer n : variable.values()) {
System.out.println(n);
}
而不是
if (answer.equals("Numbers")) {
Numbers n;
for (n : Numbers.values()) {
System.out.println(n);
}
} else {
Letters l;
for (l : Letters.values()) {
System.out.println(l);
}
}
我试过了
Class<?> c = Class.forName("Letters");
但它不起作用。
在我的真实示例中,我有 3 个 .java 文件,其中包含单独的类,每个类中都有一个枚举。有 Sandwich、Beer 和 Chip 类,它们的枚举是 Sandwiches、Beers、Chips。这些类实现了一个接口 VendingMachineItem。最后,该接口是 vendingMachine 包的一部分。我不知道这些是否重要,但这是我能提供的所有信息。
【问题讨论】:
-
forName()调用中Letters类的名称需要全限定。 -
那么,对于现实世界的例子,它会是 Class.forName("vendingMachine.VendingMachineItem.Sandwich.Sandwiches"); ?
-
不是 Enum.valueOf 你在找什么吗?输入的数字Number = Numbers.valueOf(inputString);
标签: java string reflection enums