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 に答える