2016-06-26 23 views
0

Ich habe eine Enum:String Enum in Java

public enum ListEnums { 
    TEST("test1"), 
    TEST2("test2"); 
    private final String txt; 
    ListEnums(String str){ 
     txt = str; 
    } 
    @Override 
    public String toString(){return txt;} 

ich möchte die Enum-String ohne Anruf .toString().

Like: mymethod(ListEnums.TEST);

No: mymethod(ListEnums.TEST.toString());

Ist es möglich?

BEARBEITEN Die Zeichenfolgenrückgabe muss spezielle Zeichen enthalten.

+1

Kurze Antwort: ** Nein **. Zuerst haben Sie einen Tippfehler auf "test2". Als nächstes könnten Sie "txt" einen anderen Accessor geben (der Hauptgrund, warum es nicht möglich ist, ist, dass Sie 'java.lang.String' nicht unterklassen können). –

Antwort

1

hier:

public enum ListEnums { 
    TEST("test1"), 
    TEST2("test2); 
    private final String txt; 
    ListEnums(String str){ 
     txt = str; 
    } 
    @Override 
    public String toString(){ 
     return txt; 
    } 

wenn Sie anrufen ListEnum.TEST.name() Sie TEST erhalten, die als Aufruf toString fast gleich ist() ... wenn Sie stattdessen ListEnum.TEST tun dann der Name gedruckt wird. ..

so Umbenennung der Enum-Konstanten ist der Weg zu gehen ...

und der beste Teil ist: Sie können den Konstruktor rid off bekommen, die toString Methode und die Variable txt ...

Sie brauchen es einfach nicht mehr. :)

+0

Was hast du geändert? Das Problem ist etwas nach ListEnums.TEST aufrufen. Wenn ich .name() oder .toString() einfügen wird, ändert sich nichts. – AlessioDP

+0

@AlessioDP einige, wie Sie richtig sind, aber den Punkt meiner Antwort fehlt ... Ich nahm Ihren Vorschlag und aktualisiere die Antwort ... tnxs ... –

+0

Danke, aber ich kann nicht so verwenden. Die zurückgegebene Zeichenfolge muss eine komplexe Zeichenfolge sein. Ich nehme an, ist unmöglich, was ich tun möchte. (Für eine komplexe Zeichenfolge a etwas wie: "test. * 123 * .test" – AlessioDP

0

Es ist OK, und eine gute Praxis, getters in Ihren enums zu verwenden. Auch gut, um Ihren Konstruktor privat zu halten (obwohl Enums standardmäßig privat sind).

public enum ListEnums { 
    TEST("test1"), 
    TEST2("test2"); 

    private final String txt; 

    private ListEnums(String str){ 
     txt = str; 
    } 

    public String getTxt() { 
     return txt; 
    } 
} 

public static void main(String[] args) { 
    System.out.println(ListEnums.TEST.getTxt()); 
} 
+0

Dieselbe Methode für die toString-Methode. Ich möchte das entfernen .getTxt(). – AlessioDP

+0

So wird es gemacht. Warum musst du den Getter entfernen? –

+0

Sie können ToString() verwenden, wenn Sie möchten, aber das skaliert nicht wirklich gut, wenn Sie später weitere Enum-Eigenschaften hinzufügen möchten. Also solltest du Getter verwenden. –