java - 枚举对象应该是无状态的吗?

标签 java oop enums

按照设计,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/

相关文章:

java - 错误:param @param is always null

java - 返回子类型作为父类(super class)型 java

swift - 无法访问公共(public)枚举 Swift 4.2

java - 在 python 中使用枚举创建子类的新实例

java - 无法在 Mongodb 中序列化 LocalDate

java - REGEX 努力但没有结果

javascript - 传递给构造函数的函数可以访问构造函数的其他属性吗?

c++ - OOP——让部分了解它们的整体

c# - 处理枚举更改方法的更好方法?

java - 如何在 Eclipse 项目查看器中将一个 git 存储库中的一堆项目 merge 到一个文件夹中?