使用枚举与布尔值?

2022-09-01 16:31:02

这最初可能看起来很通用,但实际上,我实际上正在决定我需要使用哪个。

我目前正在研究的工作涉及就业申请,其中需要在某个时候标记为“活跃”或“非活动”。提交申请后,它将默认为“活动”。由于某些原因,它以后可能会设置为“非活动”。它只能是其中之一,永远不会为空(以防万一这会改变任何东西)。

我正在将它与Java + Hibernate + PostgresSQL一起使用,以防这也会产生任何差异。我的第一个直觉是使用布尔值作为我的解决方案,以便它真正充当标志,但我的同事建议使用枚举整数作为一种状态,而不是一个标志。

我已经使用上述所有解决方案解决了诸如此类的问题,并且它们彼此之间似乎都有些透明。

有没有一种方法对这种情况更好?


答案 1

即使忽略将来添加更多状态类型的可能性(这当然是一个很好的论据),我认为a绝对是正确的方法。您不是在对布尔条件进行建模,而是在对应用程序的状态进行建模。想想看:应用程序的状态不是,它是活动的还是非活动的!状态将以最自然的方式表示这一点。enumenumenum

使用枚举还可以获得许多内置优势,例如将每个状态的文本描述直接绑定到它,因此您不必执行以下操作:

String text = application.isActive() ? "Active" : "Inactive";

你可以只做

String text = application.getStatus().toString();

此外,您可以使用每个枚举以不同方式实现的抽象方法将特定行为直接绑定到每个状态,将特定数据与每个状态相关联等。

您还可以轻松允许基于状态的布尔检查...如果您只存储.isActiveboolean

public boolean isActive() {
  return status == Status.ACTIVE;
}

而不应该是有效状态的事实是无关紧要的......只要确保任何存储状态的类(例如,你的类或其他类)如果有人试图在其上设置状态,就会抛出一个。nullEmploymentApplicationNullPointerExceptionnull


答案 2

这完全取决于您的要求/规格。如果只想将状态记录为活动或非活动,则最好的方法是使用 。boolean

但是,如果将来,您将拥有这样的状态,

  • 积极
  • 无效
  • 暂停
  • 封锁

枚举非常适合您。在你的例子中,现在,布尔值就足够了。不要过早地尝试将事情过于复杂化,否则您将失去对系统设计和开发的关注。


推荐