2016-04-18 163 views
0

美好的一天SO人。我有一個關於返回枚舉的內部枚舉值的問題。我不知道使用哪種返回類型。我曾嘗試使用Google,但遇到了一些使用泛型的解決方案,但我仍然沒有運氣。我不知道我的問題是否有解決方案,或者我做了一個糟糕的設計。所以在這裏, 是我的枚舉。Java - 枚舉值的返回類型

public enum KEYS 
{ 
    A("value"), 
    B("value"), 
    C("value"); 

    public enum KEYS_GROUP_A 
    { 
     ITEM_A ("value"), 
     ITEM_B ("value"), 
     ITEM_C ("value"); 

     private String value; 
     private KEYS_GROUP_A(String _value) 
     { 
      value = _value; 
     } 

     public String getVal() 
     { 
      return value; 
     } 
    } 

    public enum KEYS_GROUP_B 
    { 
     ITEM_A ("value"), 
     ITEM_B ("value"), 
     ITEM_C ("value"); 

     private String value; 
     private KEYS_GROUP_B(String _value) 
     { 
      value = _value; 
     } 

     public String getVal() 
     { 
      return value; 
     } 
    } 

    public enum KEYS_GROUP_C 
    { 
     ITEM_A ("value"), 
     ITEM_B ("value"), 
     ITEM_C ("value"); 

     private String value; 
     private KEYS_GROUP_C(String _value) 
     { 
      value = _value; 
     } 

     public String getVal() 
     { 
      return value; 
     } 
    } 

    private String value; 
    private PROPERTY_KEYS(String _value) 
    { 
     value = _value; 
    } 

    public String getVal() 
    { 
     return value; 
    } 

    public <?> getEnumValues(int x) 
    { 
     if (0 == x) 
     { 
      return KEYS.KEYS_GROUP_A.values(); 
     } 
     else if (1 == x) 
     { 
      return KEYS.KEYS_GROUP_B.values(); 
     } 
     else 
     { 
      return KEYS.KEYS_GROUP_C.values(); 
     } 
    } 
} 

我想要做的是getEnumValues()方法。我試過返回類型<T extends Enum<T>> T,但仍然出現錯誤。請告訴我的設計是壞的還是不應該做的。請說明一些參考。我願意閱讀和學習。請灑下一些光!提前致謝!

+0

「發生錯誤」不是錯誤的描述。如果您有堆棧跟蹤,請發佈它。如果您有編譯錯誤,請發佈錯誤。 – khelwood

+0

觀察KEYS_GROUP_B和KEYS_GROUP_C中的構造函數。複製粘貼錯誤,其中構造函數已針對所有3個嵌套枚舉命名爲KEYS_GROUP_A。 PROPERTY_KEYS - 這是什麼?你的意思是KEYS? – Madhusudhan

+1

'(0 == x)'不會編譯,你正在比較'int'和'String'。 –

回答

3

您可以返回最具體類型

public Enum<?>[] getEnumValues(int x) 

您可以返回一個更「有用」的類型,如果你像這樣定義一個接口:

interface HasVal { String getVal(); } 

然後進行枚舉所有執行該接口,例如:

public enum KEYS_GROUP_A implements HasVal { 
    // ... 

    @Override public String getVal() { return value; } 
} 

然後你可以返回

public HasVal[] getEnumValues(int x) 

,並能夠調用的情況下,getVal方法:

for (HasVal val : getEnumValues(x)) { 
    System.out.println(val.getVal()); 
} 

不能使用:

public <T extends Enum<T>> T[] getEnumValues(int x) 

,因爲這是不符合要求的一般T。例如,我可以定義:

enum Blah {} 

,然後嘗試調用:

Blah[] blah = getEnumValues(1); 

這不會是類型安全的,因爲代碼路徑中的至少一個(當然,所有的,實際上)返回一個與Blah[]不協變的值。

+0

謝謝先生。我怎麼才能迭代這個返回值呢?哦,等一下,我會先檢查一下,再次感謝!! :) – Oneb

+1

這只是一個數組。 ){}'。 –

+0

謝謝,先生!你搖滾!:) – Oneb