【发布时间】:2011-04-11 12:31:20
【问题描述】:
我正在寻找 Java 中有关访问器的官方命名约定。
我已经看到,例如,JPanel 类弃用了size() 方法,转而支持getSize()。
但是在ArrayList类中,方法是size()。
所以我想知道访问器应该命名为getXXX() 还是xXX()?
【问题讨论】:
我正在寻找 Java 中有关访问器的官方命名约定。
我已经看到,例如,JPanel 类弃用了size() 方法,转而支持getSize()。
但是在ArrayList类中,方法是size()。
所以我想知道访问器应该命名为getXXX() 还是xXX()?
【问题讨论】:
对于任何试图看起来像 JavaBean 的东西,它应该是 getXXX 或 isXXX。 (我不记得 hasXXX 是否对布尔属性也有效......不确定。)
以 bean 的方式处理 JPanel 是有意义的 - 对于设计师等 - 但不是 ArrayList。
我个人倾向于使用getXXX形式只是为了保持一致性,但我相信以上是ArrayList命名所涉及的推理。
【讨论】:
在 Eclipse 中,约定绝对是使用getpattern。自动化工具通过检查和编写 get 和 set 样式访问器来创建和处理 getter。
【讨论】:
对于查询方法,我总是将getXXX 视为提供的东西与计算的东西。 size() 方法返回集合的大小,这是一个派生值,所以它是有意义的。如果你有 getSize() 我的假设是我可以以某种方式设置大小(通过构造函数或设置方法)。
【讨论】:
getSize() 比size() 更有意义可以被认为是List 的(尽管是虚拟的)属性,因为它总是分配给它。
不使用 JavaBeans 约定(getter 和 setter)通常是个坏主意。
许多框架通过反射使用它们,特别是在 EL 中,有时您无法在没有权限获取器的情况下访问您的字段(取决于 EL 风格)。
因此,您的访问器应始终命名为 getXxx() 或 isXxx() 和 setXxx()。
集合框架中的size() 是一个可能会惹恼开发人员的“缺陷”示例(参见下面的链接)。 Josh Bloch 和 Neal Gafter 为使其更具可读性而做出的选择现在在某些情况下很难获得 (EL)。
但请记住,JavaBeans 约定不是 Java 命名约定。
资源:
关于同一主题:
【讨论】:
我更喜欢get/is/set-Convention(尤其是对于ValueObjects/DataObjects),不仅因为它是JavaBeans规范,还因为以下两点。
【讨论】:
这只是 Colin HERBERT 回答的一个形成性补充,在我看来,这就足够了:
public Type getProperty()。此外,访问器应始终返回属性值的副本,而不是值本身。public void setProperty(Type value)
结合一个 accessor 和一个 mutator 会给你一个 JavaBean 属性。 JavaBeans 本质上不被认为是不可变的,但是如果你想让它不可变,你应该为 mutator 方法使用以下签名:public YourJavaBean withProperty(Type value)。请注意,这应该始终返回具有复制属性值的全新 YourJavaBean 实例。
【讨论】:
按照 JavaBeans 规范遵循 setXXX 和 getXXX 模式总是更好。如此命名的 size() 方法,可能是因为它只是查询状态。
【讨论】: