使用枚举与布尔值?

新手上路,请多包涵

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

我目前正在处理的工作涉及就业申请,这些申请在某些时候需要标记为 ActiveInactive 。提交申请时,它将默认为 Active 。由于某些原因,它稍后可能会设置为 Inactive 。它只能是其中之一,并且永远不会为 (以防万一这会改变任何东西)。

我将它与 Java + Hibernate + PostgresSQL 一起使用,以防这也有任何不同。我的第一直觉是使用 Boolean 作为我的解决方案,以便它真正充当标志,但我有同事建议使用 枚举整数 作为更多的状态而不是标志。

我已经使用上述所有解决方案解决了此类问题,而且它们似乎对彼此来说都有些透明。

有没有一种方法更适合这种情况?

原文由 TheJediCowboy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 448
2 个回答

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

但是如果将来,你会有这样的身份,

  • 积极的
  • 不活跃
  • 暂停
  • 封锁

枚举非常适合你。对于您的情况,目前布尔值就足够了。不要过早地尝试使事情过于复杂,否则您会失去对系统设计和开发的关注。

原文由 Buhake Sindi 发布,翻译遵循 CC BY-SA 2.5 许可协议

即使忽略将来添加更多状态类型的可能性(这肯定是 enum 的一个很好的论据),我认为 enum 绝对是正确的方法。您不是在为布尔条件建模,而是在为应用程序的状态建模。想一想:应用程序的状态不是 truefalse ,它是 active 或 inactive!状态 enum 将以最自然的方式表示这一点。

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

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

你可以做

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

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

您还可以轻松地允许布尔值 isActive 检查是否基于状态…如果您只存储 boolean 则不能轻易地反过来做。

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

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

原文由 ColinD 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题