2013-03-08 8 views
5

Frage wurde bereits beantwortet. Danke Leute.Sind enums erlaubt, Setter in Java zu haben?

Ich habe eine enum und es hat Parameter von Strings. Darf ich Setter für diese Variablen haben?

public enum Blah { 
    Monday("a"), Tuesday("b"); 
} 

private final String letter; 

Blah(String letter){ 
    this.letter = letter; 
} 

Bin ich zu tun erlaubt:

public String setLetter(String letter){ 
    this.letter = letter; 
} 
+1

Welche Programmiersprache? Zeigen Sie uns ein repräsentatives Beispiel für den Code, auf den Sie sich beziehen. –

+0

Verwenden Sie eine bestimmte Programmiersprache? – Guffa

+0

Ich benutze Java. – user2149780

Antwort

2

Das funktioniert nicht, weil das Feld als final markiert.

Im Prinzip gibt es nichts, was verhindert, dass enums veränderbare Felder haben. Dies ist jedoch selten, wenn überhaupt eine gute Idee.

+0

Und es ist keine gute Idee, weil der Wert, den Sie im Setter gesetzt haben, über alle Enum-Instanzen verteilt wird ... – ACV

+0

Es gibt nur eine Instanz pro Enum-Konstante, also die Der Wert des Feldes wird für alle Referenzen auf diese Instanz freigegeben. – Taymon

7

Sie müssen den final Modifikator des Feldes zu entfernen, um es einstellbar zu sein:

public enum Blah { 
    Monday("a"), Tuesday("b"); 


    private String letter; 

    private Blah(String letter){ 
     this.letter = letter; 
    } 

    public void setLetter(String letter){ 
     this.letter = letter; 
    } 
} 

http://ideone.com/QAZHol

wandelbaren Zustand in einem Enum wird im Allgemeinen nicht empfohlen, jedoch.

0
public class EnumExample { 
     public enum Blah { 
     Monday("a"), Tuesday("b"); 


     private String letter; 

     private Blah(String letter){ 
      this.letter = letter; 
     } 

     public void setLetter(String letter){ 
      this.letter = letter; 
     } 

     public String getLetter(){ 
      return letter; 
     } 
    } 

     public static void main (String[] args)   { 
      System.out.println("The Value of Monday is "+ Blah.Monday.getLetter());//prints a 
      System.out.println("The Value of Tuesday is "+Blah.Tuesday.getLetter());//prints b 
     } 
} 
2

Update: Es ist möglich, Setter in Enum-Typen zu haben.

public class Main { 

public enum Account { 

    ACCOUNT("NAME"); 

    private String name; 

    private Account(String name){ 
     this.name = name; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 

public static void main(String[] args) { 
    System.out.println(Account.ACCOUNT.getName()); // print NAME 
    Account.ACCOUNT.setName("NEW"); 
    System.out.println(Account.ACCOUNT.getName()); // print NEW 
} 

}

0

in Aufzählungen ist es immer eine gute Idee, Variablen als endgültig zu erklären. Da es im obigen Beispiel nicht gemacht wird, können wir den Wert auf etwas anderes setzen.