2013-03-08 11 views
5

Pytanie zostało już udzielone. Dzięki chłopaki.Czy enumy mogą mieć seterowanie w Javie?

Mam wyliczenie i ma parametry ciągów. Czy mogę mieć seter dla tych zmiennych?

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

private final String letter; 

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

wolno mi robić:

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

Jaki język programowania? Pokaż nam reprezentatywny przykład kodu, do którego się odnosisz. –

+0

Czy używasz jakiegoś konkretnego języka programowania? – Guffa

+0

Używam Java. – user2149780

Odpowiedz

2

To nie działa, ponieważ pole jest oznaczone jako final.

Zasadniczo nic nie stoi na przeszkodzie, aby pola miały zmienne pola. Jednak rzadko jest to dobry pomysł.

+0

Nie jest to dobry pomysł, ponieważ wartość ustawiona w seterze będzie współdzielona we wszystkich instancjach wyliczeniowych ... – ACV

+0

Dzieje się tak, ponieważ istnieje tylko jedna instancja na stałą enum, więc wartość pola jest wspólna dla wszystkich odniesień do tej instancji. – Taymon

7

Trzeba usunąć final modyfikator pola, aby mogła ona być ustawiane:

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

uwzględniając stan zmienny w enum jest na ogół nie zaleca się jednak.

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

Aktualizacja: Możliwe jest ustawienie seterów w typach wyliczeniowych.

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

w teksty stałe to zawsze dobry pomysł, aby zadeklarować zmienne jako ostateczna. Ponieważ nie jest to zrobione w powyższym przykładzie, możemy ustawić wartość na coś innego.

Powiązane problemy