枚举是否允许在Java中使用setter?

use*_*780 10 java enums

问题已经回答了.多谢你们.

我有一个枚举,它有字符串的参数.我可以为这些变量设置制定者吗?

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

private final String letter;

Blah(String letter){
    this.letter = letter;
}
Run Code Online (Sandbox Code Playgroud)

我被允许这样做:

public String setLetter(String letter){
    this.letter = letter;
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*all 11

您需要删除该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;
    }
}
Run Code Online (Sandbox Code Playgroud)

http://ideone.com/QAZHol

但是,通常不建议在枚举中具有可变状态.


小智 5

更新:枚举类型中可以有设置器。

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
}
Run Code Online (Sandbox Code Playgroud)

}


Tay*_*mon 4

这不起作用,因为该字段被标记为final

原则上,没有什么可以阻止枚举具有可变字段。然而,这很少是一个好主意。