返回布尔值的java方法的命名约定(无问号)

我喜欢在其他语言的方法/函数名称末尾使用问号。 Java不会让我这样做。 作为一个解决办法,我怎样才能在java中命名布尔返回方法? 在某些情况下,使用方法声音的“是”,“有”,“应该”,“可以”可以。 有没有更好的方法来命名这种方法?

例如createFreshSnapshot?

约定是以名字问一个问题。

 isEmpty() hasChildren() 

那样的话,名字就像他们在最后会有一个问号一样被读取。

collections是空的吗?
这个节点有小孩吗?

那么, true意味着是的, false意味着没有。

或者,你可以把它看作一个断言:

该集合是空的。
节点有孩子

注意:
有时你可能想要命名一个类似createFreshSnapshot?的方法createFreshSnapshot? 。 没有问号,这个名字就意味着该方法应该创build一个快照,而不是检查是否需要。

在这种情况下,你应该重新思考你实际上在问什么。 像isSnapshotExpired这样的isSnapshotExpired是一个好得多的名字,并传达了方法在调用时会告诉你什么。

如果您在Java API中对isEmpty()进行Googlesearch ,则会得到很多结果。

如果您希望您的类与Java Beans规范兼容,那么使用reflection的工具(例如JavaBuilders , JGoodies Binding )可以识别布尔型的getter,可以使用getXXXX()isXXXX()作为方法名称。 从Java Bean规范:

8.3.2布尔属性

另外,对于布尔属性,我们允许getter方法匹配模式:

public boolean is < PropertyName > () ;

可以提供这个“< PropertyName >”方法,而不是“get < PropertyName >”方法,或者可以提供除“get < PropertyName >”方法之外的方法。 在任何一种情况下,如果“< PropertyName >”方法存在于布尔属性中,那么我们将使用“is < PropertyName >”方法读取属性值。 一个布尔属性的例子可能是:

 public boolean isMarsupial(); public void setMarsupial(boolean m); 

我想发布这个链接,因为它可能会帮助进一步窥视这个答案,并寻找更多的Java风格约定

Java编程风格指南

第14项是特别相关的,并build议使用前缀。

风格指南继续build议:

在某些情况下,有一些替代方法可以适用于更好的前缀。 这些是可以应该前缀:

 boolean hasLicense(); boolean canEvaluate(); boolean shouldAbort = false; 

如果你遵循指南,我相信适当的方法将被命名为:

 shouldCreateFreshSnapshot() 

对于可能失败的方法,那就是将boolean指定为返回types,我将使用前缀try

 if (tryCreateFreshSnapshot()) { // ... } 

对于所有其他情况下,使用前缀如is.. has.. was.. can.. allows.. ..

标准是使用“是”或“有”作为前缀。 例如isValidhasChildren

is我遇到的比其他任何人都多。 不pipe在目前情况下是否合理,都是最好的select。