2013-02-19 2 views
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, который не имеет каких-либо полей, его просто так я могу обобщенно типа моих перечислений так моя структура данных готова принять любой из них.

Каков самый чистый способ сделать это?

+1

Я не понимаю, что вы пытаетесь достичь. Что делать, если в 'Catalog' имеется несколько полей типа' T1'? Какой из них вы ожидаете получить при вызове 'Catalog.getEnum (« T1 »)'? – Perception

+0

Извините, если мои переменные не ясны, я изменю их, чтобы они были более наглядными, есть несколько перечислений, и я хочу, чтобы каждый из них вызывал вызов функции. – Aboutblank

+0

Итак, вы хотите получить класс Enum? – Perception

ответ

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); 
    } 
} 
+0

Отвратительно, что мы должны это сделать, но это решило мою проблему. Благодарю. –

1

Возможно, вы имели в виду Catalog.T1.valueOf("TC1")?

В Java, все перечислений реализовать метод valueOf(String), see here.

Смежные вопросы