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

Java 从具有多个枚举的类获取枚举,java,enums,Java,Enums,我有一个类似这样的类: public class Catalog { public enum Table1 implements IExcelEnum{ Name, Date, Id } public enum Table2 IExcelEnum { ... } } public class Catalog { public interface I { } public enu

我有一个类似这样的类:

public class Catalog {

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

    public enum Table2 IExcelEnum {
        ...
    }
}
    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,例如:

System.out.println(Catalog.Table2.Name.value());
但我想做的是能够提供一个字符串或标识符,并将枚举返回,以便在创建数据对象时引用它。例如:

Data dataCol1 = new Data(Catalog.getEnum("Table1"), ArrayList<String> values);
Data dataCol1=新数据(Catalog.getEnum(“表1”),ArrayList值);
我有一个名为IExcelEnum的接口,它没有任何字段,这样我就可以通用地键入枚举,这样我的数据结构就可以接受其中的任何一个


最干净的方法是什么?

你是说
Catalog.T1.valueOf(“TC1”)


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

您的意思是
Catalog.T1.valueOf(“TC1”)


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

您可能需要像这样使用反射:

public class Catalog {

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

    public enum Table2 IExcelEnum {
        ...
    }
}
    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);
    }
}
公共类目录
{
公共接口I
{
}
公共枚举T1实现I
{
A、 B,C;
}
公共枚举T2实现I
{
D、 E,F;
}
公共静态void main(字符串[]args)引发异常
{
String name=“T1”;

类您可能需要像这样使用反射:

public class Catalog {

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

    public enum Table2 IExcelEnum {
        ...
    }
}
    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);
    }
}
公共类目录
{
公共接口I
{
}
公共枚举T1实现I
{
A、 B,C;
}
公共枚举T2实现I
{
D、 E,F;
}
公共静态void main(字符串[]args)引发异常
{
String name=“T1”;

类I不了解您试图实现的目标。如果您在
目录中有多个
T1
类型的字段,您希望调用
Catalog.getEnum(“T1”)返回哪一个字段
?很抱歉,如果我的变量不清楚,我会将它们更改为更具描述性,有多个枚举,我希望能够通过函数调用获取每个枚举。因此,您希望获取枚举类本身吗?我希望能够将表1传递给另一个类,并使其能够对其进行迭代。我不明白您试图实现的目标。如果在
Catalog
中有多个
T1
类型的字段,您希望调用
Catalog.getEnum(“T1”)返回哪一个字段
?很抱歉,如果我的变量不清楚,我会将它们更改为更具描述性的,有多个枚举,我希望能够通过函数调用获取每个枚举。因此,您希望获取枚举类本身吗?我希望能够将表1传递给另一个类,并使其能够对其进行迭代。我们必须这样做有点令人讨厌,但是这解决了我的问题。谢谢。我们不得不这样做有点令人讨厌,但这解决了我的问题。谢谢。