java - 返回枚举值或使用 boolean 值 getter

标签 java oop enums getter

我有一个问题,可能是纯粹的品味问题,但我只是想从不同角度获得一些意见,以便对此更加清楚。

类从数据库读取状态值并将其写入数据库。目前有 5 个状态值,可能会更多。为简洁起见,我在示例中仅使用了 3 个状态值。另外,虽然这是 Java 代码,但这个概念也可以转移到其他语言。

class Status {
  private enum Value { FAILED, FINISHED, RUNNING }

  // getters (read from db)
  // ...
  // setters (write into db)
  // ...
}

我无法决定是否应该使用通用的 getter 和 setter,例如

Value get()

void set(Value value)

或者我是否应该创建具有更多语义的特定 getter 和 setter,例如

boolean isRunning()
boolean hasFailed()
boolean hasFinished()  // could also be named isFinished()...

void setFailed()
void setFinished()
void setRunning()

该组件对性能并不关键,但语义 getter 的明显缺点是您需要对 if-else if 语句进行多次数据库读取,并且 switch 不能用过的。另一方面,它向使用者隐藏了实现的内部细节,并且不需要使用此类之外的枚举值:

if (status.get() == Status.Value.RUNNING) { ... }

对比

if (status.isRunning()) { ... }

欢迎任何评论。

最佳答案

如果客户端必须编写多次比较,例如:

if (status.get() == Status.Value.RUNNING) { ... }

您可能为 Status 中包含的枚举字段提供了太多细粒度的 API类。
它将强制每个客户端拥有重复的代码或以其他方式创建自己的 util 方法,例如 boolean isRunning(Status status){return status.get() == Status.Value.RUNNING}

这不是一个好主意,原因有两个:

  • 样板代码必须位于 API 的内部/实现中,而不是位于客户端。
  • 方法必须位于最适合容纳它的类中。在本例中,这是 Status 。不要限制客户端类承担此方法的责任。

请注意,您不应同时提供:值 getter/setter + 特定方法。这可能会产生误导。

关于java - 返回枚举值或使用 boolean 值 getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49386493/

相关文章:

Java 用一个参数比较对象

java - 控制 - Java 中的 C 异常

python - 使用 Pygments 检测代码片段的编程语言

c++ - 如何在循环中访问数组对象的成员函数

java - 插入排序

java - 在没有循环的情况下,有多少个 Java Enum 实例可用?

java - 如何在Java中声明和使用静态枚举

java - 人们可以轻松访问 Android Realm 文件吗?

java - 与 NetBeans 的 JDBC 连接

enums - 使用 Protocol Buffer ,将枚举从内部消息移动到外部消息是否安全?