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

时间:2010-10-06 15:48:26

标签: java methods naming-conventions

我喜欢在其他语言的方法/函数名称末尾使用问号。 Java不允许我这样做。作为一种解决方法,我如何在Java中命名布尔返回方法?对于某些情况,在方法前面使用ishasshouldcan听起来没问题。是否有更好的方法来命名这些方法?

例如createFreshSnapshot?

7 个答案:

答案 0 :(得分:99)

惯例是在名称中提出问题。

以下是一些可以在JDK中找到的示例:

isEmpty()

hasChildren()

这样,读取的名称就像在末尾有一个问号一样。

  

集合是空的吗?   这个节点有孩子吗?

然后,true表示是,而false表示否。

或者,您可以像断言一样阅读:

  

收藏品是空的   该节点有子节点

注意:
有时,您可能希望将方法命名为createFreshSnapshot?。如果没有问号,名称意味着该方法应该创建快照,而不是检查是否需要。

在这种情况下,您应该重新考虑您实际要求的内容。像isSnapshotExpired之类的东西是一个更好的名字,并传达了方法在调用时会告诉你的内容。遵循这样的模式也可以帮助保持更多的功能纯净,没有副作用。

如果您在Java API中为isEmpty()执行Google Search,则会获得大量结果。

答案 1 :(得分:27)

如果您希望自己的课程与Java Beans specification兼容,那么使用反射的工具(例如JavaBuildersJGoodies Binding)可以识别布尔型getter,请使用getXXXX()isXXXX()作为方法名称。来自Java Beans规范:

  

8.3.2布尔属性

     

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

     

public boolean is< 的PropertyName > ();

     

可以提供此“< PropertyName >”方法而不是“get< PropertyName >”方法,或者可以提供此方法“get< PropertyName >”方法。在任何一种情况下,如果布尔属性存在“is< PropertyName >”方法,那么我们将使用“is< PropertyName >”方法来读取适当的价值。布尔属性的示例可能是:

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

答案 2 :(得分:20)

我想发布此链接,因为它可能有助于进一步窥视检查此答案并寻找更多java风格的约定

Java Programming Style Guidelines

第14项具体相关,并建议前缀。

风格指南继续建议:

  

前缀的一些替代方案在某些情况下更适合。这些可以应该前缀:

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

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

shouldCreateFreshSnapshot()

答案 3 :(得分:13)

对于可能失败的方法,即你将boolean指定为返回类型,我会使用前缀try

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

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

答案 4 :(得分:5)

标准是使用'is'或'has'作为前缀。例如isValidhasChildren

答案 5 :(得分:2)

is是我遇到的比任何其他人更多的人。在目前的情况下,任何有意义的事情都是最好的选择。

答案 6 :(得分:0)

对于这种通用命名约定,我想提出不同的看法,例如:

请参见java.util.Setboolean add​(E e)

理由是:

然后进行一些处理 报告 是否成功

虽然return确实是boolean,但方法的名称应指向要完成的处理,而不是结果类型(为此为布尔值)例如)。

对于我来说,您的createFreshSnapshot示例似乎与这种观点更为相关,因为这似乎意味着:创建一个新快照,然后报告创建操作是否成功。考虑到这种原因,createFreshSnapshot这个名称似乎是最适合您的情况。