返回布尔值的 Java 方法的命名约定
我喜欢在其他语言的方法/函数名称的末尾使用问号。Java不允许我这样做。作为一种解决方法,我还如何在Java中命名布尔返回方法?在某些情况下,在方法前面使用 、 、 听起来还不错。有没有更好的方法来命名这些方法?is
has
should
can
例如,创建FreshSnapshot?
我喜欢在其他语言的方法/函数名称的末尾使用问号。Java不允许我这样做。作为一种解决方法,我还如何在Java中命名布尔返回方法?在某些情况下,在方法前面使用 、 、 听起来还不错。有没有更好的方法来命名这些方法?is
has
should
can
例如,创建FreshSnapshot?
惯例是在名称中提出问题。
以下是可以在 JDK 中找到的几个示例:
isEmpty()
hasChildren()
这样,名称的读法就像它们在末尾有一个问号一样。
集合是否为空?
此节点有子节点吗?
然后,意味着是,意味着不。true
false
或者,你可以把它当作一个断言来读:
集合为空。
节点具有子节点
注意:
有时您可能希望将方法命名为 .。如果没有问号,则名称表示该方法应创建快照,而不是检查是否需要快照。createFreshSnapshot?
在这种情况下,你应该重新思考你实际在问什么。像这样的东西是一个更好的名称,它传达了该方法在调用时会告诉您的内容。遵循这样的模式也有助于保持更多的功能纯净,没有副作用。isSnapshotExpired
如果你在Java API中对isEmpty()
进行Google搜索,你会得到很多结果。
如果您希望您的类与 Java Beans 规范兼容,以便利用反射的工具(例如 JavaBuilders、JGoodies Binding)可以识别布尔 getter,则可以使用 或 将其用作方法名称。来自 Java Beans 规范:getXXXX()
isXXXX()
8.3.2 布尔属性
此外,对于布尔属性,我们允许 getter 方法匹配模式:
public boolean is
<属性名称>()
;可以提供此“is<PropertyName>”方法而不是“get<PropertyName>”方法,也可以在“get<PropertyName>”方法之外提供此方法。在任何一种情况下,如果布尔属性存在“is<PropertyName>”方法,那么我们将使用“is<PropertyName>”方法来读取属性值。示例布尔属性可能是:
public boolean isMarsupial(); public void setMarsupial(boolean m);