2013-03-08 35 views
5

質問は既に回答済みです。みんなありがとう。enumはJavaでセッターを持つことができますか?

私は列挙型を持ち、Stringsのパラメータを持っています。 私はこれらの変数の設定を許可していますか?

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

どのようなプログラミング言語ですか?あなたが参照しているコードの代表例を見せてください。 –

+0

特定のプログラミング言語を使用していますか? – Guffa

+0

私はJavaを使用しています。 – user2149780

答えて

2

フィールドはfinalとしてマークされているので、これは動作しません:

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

private final String letter; 

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

は私がさせて頂いております。

原則として、列挙型が可変フィールドを持つことを妨げるものは何もありません。しかし、これはめったに良い考えではありません。

+0

setterで設定した値がすべての列挙型インスタンスで共有されるため、いい考えではありません。 – ACV

+0

列挙型定数ごとに1つのインスタンスしかないので、フィールドの値は、そのインスタンスへのすべての参照で共有されます。 – Taymon

7

は、あなたはそれが設定可能であるためには、フィールドのfinal修飾子を削除する必要があります。

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

しかし、一般的に推奨されていない列挙型で変更可能な状態を有します。

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

更新:setterを列挙型にすることは可能です。列挙型で

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

それが最終的として変数を宣言することは常に良い考えです。上記の例では行われていないので、値を別のものに設定することができます。

関連する問題