免责声明:我不会说我是最有经验的Java人。可以有更简单的方法来完成我的示例中的操作。但这是一个关于将字符串条目转换为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){};
...
}
我想让用户如此,如果他输入“Letters”,它将能够获取字符串条目并将其转换为Letters Enum的变量引用。省略号是代码的占位符。我想最终使用它,所以我可以使用
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文件,其中包含单独的类,并且每个文件都有一个枚举。有三明治,啤酒和芯片类,他们的口号是三明治,啤酒,薯片。这些类实现了VendingMachineItem接口。最后,该接口是vendingMachine包的一部分。我不知道这些是否重要,但这就是我能提供的所有信息。
答案 0 :(得分:2)
以下工作(在Eclipse下使用Java6测试):
package com.bob;
public class Test
{
public enum Letters {
A, B, C, D, E
}
public enum Numbers {
ONE, TWO, THREE, FOUR, FIVE
}
public static void main(String [] args) throws Exception
{
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);
entry = reader.readLine();
Class<Enum<?>> clazz = (Class<Enum<?>>)Class.forName("com.bob.Test$" + entry);
for (Enum<?> x : clazz.getEnumConstants())
{
System.out.println(x);
}
}
}
请注意,由于是内部类,枚举的完全限定类名是com.bob.Test$Letters
和com.bob.Test$Numbers
。错误处理留作练习。
答案 1 :(得分:1)
我不确定我是否完全正确。但是你想做类似下面的事情吗?
package com.test;
enum EnumType {A1, A2, A3};
public class Test {
public static void main(String[] args) throws ClassNotFoundException {
Class<?> clazz = Class.forName("com.test.EnumType");
if (!clazz.isEnum()) {
throw new IllegalArgumentException("Enum type expected");
}
Enum<?>[] constants = (Enum<?>[])clazz.getEnumConstants();
for (Enum<?> constant : constants) {
System.out.println(constant.name());
}
}
}
答案 2 :(得分:1)
您想使用valueOf()
。如果选择是字母,那么您将使用Letters.valueOf(input)
,如果选择的是数字,则使用Numbers.valueOf(input)
。
答案 3 :(得分:0)
这就是你所使用的(使用Java 6语法)?
String firstInput = // "Letters";
String secondInput = // "A"
Letters letter = null;
Numbers number = null;
if (Letters.class.getSimpleName().equals(input)) {
letter = Enum.valueOf(Letters.class, secondInput);
}
else if (Numbers.class.getSimpleName().equals(input)) {
number = Enum.valueOf(Numbers.class, secondInput);
}
当代码执行完毕后,letter
以上的输入将等于A
,number
将保持null
。