将字符串转换为Enum类



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

我想让它这样的用户,如果他输入"字母",它将能够采取字符串条目,并把它变成一个变量引用的字母枚举。省略号是代码的占位符。我想最终使用这个所以我可以使用

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文件,其中包含单独的类,每个类中都有一个enum。有三明治,啤酒和薯条类,它们的枚举是三明治,啤酒,薯条。这些类实现了接口VendingMachineItem。最后,该接口是vendingMachine包的一部分。我不知道这些是否重要,但这是我能提供的所有信息。

下面的工作(在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$Letterscom.bob.Test$Numbers。错误处理留作练习。

我不确定我是否完全理解对了。但是你想做下面的事情吗?

    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());
            }
        }
    }

您要使用valueOf()。如果选择字母,则使用Letters.valueOf(input),如果选择数字,则使用Numbers.valueOf(input)

这是你之后(使用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

相关内容

  • 没有找到相关文章

最新更新