Java:访问器的命名约定

5

我正在寻找Java中官方的访问器命名约定,涉及到IT技术。

例如,我已经看到JPanel类弃用了size()方法,改用getSize()方法。

但是在ArrayList类中,该方法仍然是size()

因此,我想知道访问器应该命名为getXXX()还是xXX()

7个回答

11
通常不使用JavaBeans约定(getter和setter)是一个不好的主意。许多框架都会通过反射使用它们,特别是在EL中,有时候如果没有正确的getter,你就无法访问字段。因此,你的访问器应该始终命名为getXxx()或isXxx()和setXxx()。
集合框架中的size()是一个可能会让开发人员感到烦恼的"缺陷"示例(请参见下面的链接)。Josh Bloch和Neal Gafter做出的选择使其更易读,但在某些情况下(EL),这使得它难以获得。
但请记住,JavaBeans约定并不是Java命名约定。

资源:

相关主题:


3
我很有趣地发现命名约定页面的标题是“NO TITLE”,呵呵。 - Tim Stone

3

在查询方法中,我总是将getXXX视为提供的内容而不是计算出来的内容。 size()方法返回集合的大小,这是一个派生值,因此它是有意义的。如果你有getSize(),我的假设是我可以通过构造函数或setter方法来设置大小。


你说得很有道理,但我认为与 size() 相比,getSize() 更有意义,因为它可以被视为 List 的(虚拟)属性,因为它总是有一个大小分配给它。 - Johannes Wachter

1

对于任何试图看起来像JavaBean的东西,它应该是getXXXisXXX。(我记不清hasXXX对于布尔属性是否有效...不确定。)

JPanel以bean的方式处理-对于设计师等是有意义的,但不适用于ArrayList

个人而言,我倾向于仅使用getXXX形式以保持一致性,但我相信上述是涉及ArrayList命名的原因。


1

这只是对Colin HERBERT的回答的补充,我认为他的回答已经足够了:

  • 访问器方法签名应该始终像public Type getProperty()。此外,访问器应该始终返回属性值的副本,而不是值本身。
  • 修改器方法签名应该始终像public void setProperty(Type value)

访问器修改器组合在一起,就可以得到一个JavaBean属性。JavaBeans本质上不被认为是不可变的,但如果您想使其不可变,您应该使用以下修改器方法的签名:public YourJavaBean withProperty(Type value)。请注意,这应该始终返回一个完全新的YourJavaBean实例,其中包含复制的属性值。


0

根据JavaBeans规范,遵循setXXX和getXXX模式总是更好的选择。size()方法的命名可能是因为它只是查询状态。


0
在Eclipse中,惯例是使用“get”模式。自动化工具通过检查并编写“get”和“set”样式的访问器来创建和处理getter。

0

我更喜欢使用get/is/set命名约定(尤其是针对ValueObjects/DataObjects),不仅因为它是JavaBeans规范,还因为以下两点:

  1. 方法的清晰前缀将属性相关方法与'逻辑'方法分开。
  2. 您可以在JSP和其他假定此命名的框架中直接使用它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接