这可能起初看起来很普通,但事实上,我实际上是在做我需要使用的决定
我目前正在处理的是就业申请,这些申请需要在某个时间点标记为“活动”或“非活动”。提交申请时,它将默认为活动。由于某些原因,以后可能会将其设置为非活动。它只能是其中的一个,并且永远不为空(以防发生任何变化)
我将其用于Java+Hibernate+postgresql,以防这也会产生任何影响。我的第一反应是使用布尔值作为我的解决方案,以便它真正起到标志的作用,但我有一些同事建议使用枚举或整数作为状态,而不是标志
我已经用上面所有的解决方案解决了类似这样的问题,它们看起来都是透明的
有没有一种方法更适合这种情况
即使忽略将来添加更多状态类型的可能性(这当然是enum
的一个很好的论据),我认为enum
绝对是正确的选择。您不是在为布尔条件建模,而是在为应用程序的状态建模。想想看:应用程序的状态不是真或假,它是活动的或非活动的!状态enum
将以最自然的方式表示这一点
使用enum还具有许多内置的优点,例如将每个状态的文本描述直接绑定到enum,这样就不必执行类似的操作
String text=application.isActive()?“活动”:“非活动”;
你可以这么做
String text=application.getStatus().toString();
此外,您可以使用每个枚举以不同方式实现的抽象方法将特定行为直接绑定到每个状态,将特定数据与每个状态关联,等等
您还可以轻松允许基于状态的布尔isActive
检查。。。如果只存储一个布尔值
,就很难实现相反的目的
公共布尔isActive(){
返回状态==status.ACTIVE;
}
而null
不应该是有效状态的事实与此无关。。。只要确保存储状态的任何类(例如,您的EmploymentApplication
类或任何其他类)在有人试图对其设置null
状态时抛出NullPointerException