按照设计,java 中的枚举常量是单例,为了并发使用,我通常创建无状态枚举实例并使用方法参数根据需要注入(inject)数据。
例子:
目前我正在创建一个具有操作的 REST 服务(使用策略模式的变体实现为枚举)。
public enum Operation {
DO_THIS() {
public Result doSomething(Object theData) {
}
} ,
// Other Operations go here
;
public abstract Result doSomething(Object theData);
}
现在我想收集有关调用操作的频率和成功频率等的数据。
我可以在使用枚举实例时在外部保存状态,但似乎状态应该保存在操作中,因为操作应该包含它自己的状态。
现在我的一般问题是:
有状态枚举实例(除了并发问题之外)是一个糟糕的设计吗?
最佳答案
我认为这违反了最小惊讶原则。
人们期望枚举的常见用法与最初设计的一样——作为常量或标记,而不是作为具有状态的通用类。
关于java - 枚举对象应该是无状态的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/540293/