从具有多个枚举的类中获取枚举

时间:2013-02-19 19:50:48

标签: java enums

我有一个看起来像这样的课程:

public class Catalog {

    public enum Table1 implements IExcelEnum{
            Name, Date, Id
    }

    public enum Table2 IExcelEnum {
        ...
    }
}

我可以进入枚举Table1,例如:

System.out.println(Catalog.Table2.Name.value());

但我想要做的是能够提供一个String或一个标识符并将枚举恢复出来,这样我就可以在创建数据对象时引用它。例如:

Data dataCol1 = new Data(Catalog.getEnum("Table1"), ArrayList<String> values);

我有一个名为IExcelEnum的接口,它没有任何字段,只是因为我可以通常输入我的枚举,所以我的数据结构愿意接受它们中的任何一个。

最干净的方法是什么?

2 个答案:

答案 0 :(得分:2)

你可能需要使用这样的反射:

    public class Catalog
{
    public interface I
    {
    }

    public enum T1 implements I
    {
        A, B, C;
    }

    public enum T2 implements I
    {
        D, E, F;
    }

    public static void main (String [] args) throws Exception
    {
        String name = "T1";

        Class <? extends I> c =
            (Class <? extends I>)Class.forName (
                Catalog.class.getName () + "$" + name);

        I [] values = (I [])c.getMethod ("values").invoke (null);

        for (I i: values)
            System.out.println (i);
    }
}

答案 1 :(得分:1)

您的意思是Catalog.T1.valueOf("TC1")吗?

在Java中,所有枚举都实现valueOf(String)方法,see here.