我有一个看起来像这样的课程:
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的接口,它没有任何字段,只是因为我可以通常输入我的枚举,所以我的数据结构愿意接受它们中的任何一个。
最干净的方法是什么?
答案 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.