2016-04-18 14 views
0

Guten Tag SO Leute. Ich habe ein Problem bezüglich der Rückgabe der inneren Enum-Werte meines Enums. Ich weiß nicht, welcher Rückgabetyp verwendet werden soll. Ich habe versucht zu googeln und stieß auf einige Lösungen, die Generika verwendet, aber ich habe immer noch kein Glück. Ich weiß nicht, ob meine Frage eine Lösung oder wahrscheinlich ein schlechtes Design hat. Also hier geht, unter ist meine enum.Java - Rückgabetyp für Enum-Werte

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(); 
     } 
    } 
} 

Was ich versuche ist die getEnumValues() Methode. Ich habe versucht, den Rückgabetyp <T extends Enum<T>> T, aber immer noch ein Fehler auftritt. Bitte sagen Sie mir, ob mein Design schlecht ist oder nicht. Bitte geben Sie einige Referenzen an. Ich bin bereit zu lesen und zu lernen. Bitte werfen Sie etwas Licht! Danke im Voraus!

+0

"Ein Fehler tritt auf" ist keine Beschreibung eines Fehlers. Wenn Sie einen Stack-Trace haben, posten Sie ihn. Wenn Sie einen Kompilierungsfehler haben, melden Sie den Fehler. – khelwood

+0

Beobachten Sie den Konstruktor in KEYS_GROUP_B und KEYS_GROUP_C. Ein Copy-Paste-Fehler, bei dem die Konstruktoren für alle drei geschachtelten Enumerationen den Namen KEYS_GROUP_A erhalten haben. PROPERTY_KEYS - was ist das? Meinst du KEYS stattdessen? – Madhusudhan

+1

'(0 == x)' kompiliert nicht, Sie vergleichen 'int' mit' String'. –

Antwort

3

Die spezifische Art Sie zurückkehren können, ist

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

Sie können einen „nützlichen“ Typ zurück, wenn Sie eine Schnittstelle wie folgt definieren:

interface HasVal { String getVal(); } 

dann Aufzählungen alle machen implementieren, dass Schnittstelle, zB:

public enum KEYS_GROUP_A implements HasVal { 
    // ... 

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

Dann können Sie zurückkehren

public HasVal[] getEnumValues(int x) 

und der Lage sein, die getVal Methode auf den Instanzen aufzurufen:

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

Sie können nicht verwenden:

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

weil dies nicht für eine allgemeine erfüllbar T. Zum Beispiel könnte ich definieren:

enum Blah {} 

und dann aufzurufen versuchen:

Blah[] blah = getEnumValues(1); 

Das ist nicht typsicher sein würde, weil zumindest eine (na ja, alle, tatsächlich) der Codepfade einen Wert zurückgeben, der nicht kovariant ist mit Blah[].

+0

Vielen Dank Sir, aber eine Frage, wie kann ich durch diesen Rückgabewert durchlaufen? Oh, Moment, ich werde es zuerst in Google überprüfen. Nochmals vielen Dank !! :) – Oneb

+1

Es ist nur ein Array. 'Für (Enum Wert: getEnumValues ​​(i)) {} '. –

+0

Vielen Dank Sir! Sie rocken! :) – Oneb

Verwandte Themen