将字符串转换为Enum类

Bob*_*Bob 6 java string reflection enums

免责声明:我不会说我是最有经验的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){};
    ...
}
Run Code Online (Sandbox Code Playgroud)

我想让用户如此,如果他输入"Letters",它将能够获取字符串条目并将其转换为Letters Enum的变量引用.省略号是代码的占位符.我想最终使用它,所以我可以使用

for (answer n : variable.values()) {
    System.out.println(n);
}
Run Code Online (Sandbox Code Playgroud)

代替

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我试过了

Class<?> c = Class.forName("Letters");
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

在我的真实世界示例中,我有3个.java文件,其中包含单独的类,并且每个文件都有一个枚举.有三明治,啤酒和芯片类,他们的口号是三明治,啤酒,薯片.这些类实现了VendingMachineItem接口.最后,该接口是vendingMachine包的一部分.我不知道这些是否重要,但这就是我能提供的所有信息.

Jim*_*son 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);
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,枚举的完全限定类名是com.bob.Test$Letters并且com.bob.Test$Numbers由于是内部类。错误处理留作练习。