2013-03-08 15 views
5

La domanda ha già avuto risposta. Grazie ragazzi.Alle enumerazioni è consentito avere setter in Java?

Ho un enum e ha parametri di stringhe. Sono autorizzato ad avere setter per queste variabili?

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

private final String letter; 

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

Sono autorizzato a farlo:

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

Quale linguaggio di programmazione? Mostraci un esempio rappresentativo del codice a cui ti riferisci. –

+0

Stai usando un particolare linguaggio di programmazione? – Guffa

+0

Sto usando Java. – user2149780

risposta

2

questo non funziona perché il campo è contrassegnato come final.

In linea di principio, non c'è nulla che impedisca l'enumerazione di avere campi mutabili. Tuttavia, questo è raramente, se mai una buona idea.

+0

E non è una buona idea perché il valore impostato nel setter sarà condiviso tra tutte le istanze enum ... – ACV

+0

È perché c'è solo una istanza per costante enum, quindi il il valore del campo è condiviso tra tutti i riferimenti a quell'istanza. – Taymon

7

è necessario rimuovere la final modificatore del campo in modo che esso per essere impostabile:

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

Avendo stato mutevole in un enum è generalmente sconsigliata, tuttavia.

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

Aggiornamento: È possibile avere setter in tipi di enum.

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 enumerazioni è sempre una buona idea di dichiarare le variabili come definitiva. Dato che non è fatto nell'esempio sopra, siamo in grado di impostare il valore su qualcos'altro.

Problemi correlati