Java 中布尔动词的变量和方法命名约定?

Variable and method naming conventions for boolean verbs in Java?

我知道很多人建议这个约定:

boolean deleted;
boolean isDeleted();

但是当你想命名一个布尔值来指示用户可以离开时你会怎么做?

boolean userCanLeave
boolean isUserCanLeave()

boolean canUserLeave
boolean isCanUserLeave()

boolean userLeave
boolean isUserLeave()

boolean userLeave
boolean canUserLeave()

我不确定这是否有任何标准,还是您只采用您认为最易读的标准?这里有趣的是 getter 方法名称映射的变量。

许多框架仍然使用方法调用来设置 beans 的值,这些方法需要符合特定的模式:

isXXXgetXXX

所以我尽量坚持这一点,即使我没有使用框架来创建 bean 的实例,或者如果这些框架使用反射直接绑定到变量。我仍然认为这是很好的做法。

所以getUserCanLeave()?或者 isUserLeavable()?

像这样使用布尔值几乎总是一个糟糕且令人困惑的想法。如果你想让你的代码易于理解和维护,你应该使用枚举来表示状态,也许有强大的转换规则(FSM)。

假设您的 'leave' 概念是基于用户是否完成了一项任务或一组任务,那么您可能

public enum UserState { inProgress, complete }

然后您可以在您的用户 class 上实现方法 leave,如下所示:

public void leave() { if (state == UserState.complete) ... }

其中 state 是上面定义的枚举的私有实例。然后,如果需要这样的事情,您可以将问题 isLeaveable 重新定义为 getState。当然,您还需要一个 complete() 方法来适当地更改状态,并在用户完成任务时调用该方法。

您应该使用更好的变量名,例如 userAllowedToLeave

并且,然后使用getter方法作为isUserAllowedToLeave()

这至少使用了 "is" getter,并且听起来语法也正确。