我喜欢在其他语言的方法/函数名称末尾使用问号。 Java不允许我这样做。作为一种解决方法,我如何在Java中命名布尔返回方法?对于某些情况,在方法前面使用is
,has
,should
,can
听起来没问题。是否有更好的方法来命名这些方法?
例如createFreshSnapshot?
答案 0 :(得分:99)
惯例是在名称中提出问题。
以下是一些可以在JDK中找到的示例:
isEmpty()
hasChildren()
这样,读取的名称就像在末尾有一个问号一样。
集合是空的吗? 这个节点有孩子吗?
然后,true
表示是,而false
表示否。
或者,您可以像断言一样阅读:
收藏品是空的 该节点有子节点
注意:强>
有时,您可能希望将方法命名为createFreshSnapshot?
。如果没有问号,名称意味着该方法应该创建快照,而不是检查是否需要。
在这种情况下,您应该重新考虑您实际要求的内容。像isSnapshotExpired
之类的东西是一个更好的名字,并传达了方法在调用时会告诉你的内容。遵循这样的模式也可以帮助保持更多的功能纯净,没有副作用。
如果您在Java API中为isEmpty()
执行Google Search,则会获得大量结果。
答案 1 :(得分:27)
如果您希望自己的课程与Java Beans specification兼容,那么使用反射的工具(例如JavaBuilders,JGoodies 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'作为前缀。例如isValid
,hasChildren
。
答案 5 :(得分:2)
is
是我遇到的比任何其他人更多的人。在目前的情况下,任何有意义的事情都是最好的选择。
答案 6 :(得分:0)
对于这种通用命名约定,我想提出不同的看法,例如:
请参见java.util.Set:boolean add(E e)
理由是:
然后进行一些处理 报告 是否成功。
虽然return
确实是boolean
,但方法的名称应指向要完成的处理,而不是结果类型(为此为布尔值)例如)。
对于我来说,您的createFreshSnapshot
示例似乎与这种观点更为相关,因为这似乎意味着:创建一个新快照,然后报告创建操作是否成功。考虑到这种原因,createFreshSnapshot
这个名称似乎是最适合您的情况。