2017-02-16 120 views
3

對於測試支持,我有以下枚舉。這是關於I18n如何獲得在另一個枚舉中聲明的所有嵌套枚舉的集合或數組?

public enum PersonaFieldI18n { 

    NOTHING_TO_DO; 

    private PersonaFieldI18n(){ 

    } 

    public enum English { 

     ID("Id"), 
     NOMBRE("Name"), 
     APELLIDO("Last Name"), 
     FECHA("Date"); 

     private String field; 

     private English(String field){ 
      this.field = field; 
     } 

     public String getField() { 
      return field; 
     } 

    } 

    public enum Spanish { 

     ID("Id"), 
     NOMBRE("Nombre"), 
     APELLIDO("Apellido"), 
     FECHA("Fecha"); 

     private String field; 

     private Spanish(String field){ 
      this.field = field; 
     } 

     public String getField() { 
      return field; 
     } 

    } 

    public enum Portuguese { 

     ID("Id"), 
     NOMBRE("Nome"), 
     APELLIDO("Sobrenome"), 
     FECHA("Data"); 

     private String field; 

     private Portuguese(String field){ 
      this.field = field; 
     } 

     public String getField() { 
      return field; 
     } 

    } 
} 

如果PersonaFieldI18n.values()執行,它只返回NOTHING_TO_DO

什麼是方法(如果存在)獲取每個嵌套枚舉的集合或數組?

我需要一種方法來調用PersonaFieldI18n枚舉它返回下列元素中定義的方法:

  • PersonaFieldI18n.English
  • PersonaFieldI18n.Spanish
  • PersonaFieldI18n.Portuguese

正如你所看到的,上面顯示的每個元素都是PersonaFieldI18n enum的嵌套枚舉。

這是可能嗎?怎麼樣?什麼是最好的實施?

+1

你知道這是一個非常糟糕的方式做國際化,對不對? – Kayaman

+1

讓我知道更好的方法。提前致謝。記住它是用於測試目的。 –

+1

「嵌套」枚舉實際上只是靜態內部類。你可以用反射來迭代它們。 – Kevin

回答

2

as @Kevin says嵌套枚舉實際上是PersonaFieldI18n的內部類,所以你可以通過反射得到它們。

如下聲明:

Class<?>[] classes = PersonaFieldI18n.class.getDeclaredClasses();