0

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

public class Catalog {

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

    public enum Table2 IExcelEnum {
        ...
    }
}

我可以到枚举Table1,比如:

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

但是我想要做的是能够提供一个字符串或一个标识符,然后把枚举取出来,这样我就可以在创建我的数据对象时引用它。例如:

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

我有一个名为 IExcelEnum 的接口,它没有任何字段,它只是为了让我可以通用地键入我的枚举,以便我的数据结构愿意接受其中的任何一个。

最干净的方法是什么?

4

2 回答 2

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);
    }
}
于 2013-02-19T19:58:41.463 回答
1

你的意思是Catalog.T1.valueOf("TC1")

在 Java 中,所有枚举都实现了该valueOf(String)方法,请参见此处。

于 2013-02-19T19:54:56.937 回答