【问题标题】:Java : naming convention for accessorsJava:访问器的命名约定
【发布时间】:2011-04-11 12:31:20
【问题描述】:

我正在寻找 Java 中有关访问器的官方命名约定。

我已经看到,例如,JPanel 类弃用了size() 方法,转而支持getSize()

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

所以我想知道访问器应该命名为getXXX() 还是xXX()

【问题讨论】:

    标签: java naming-conventions


    【解决方案1】:

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

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

    我个人倾向于使用getXXX形式只是为了保持一致性,但我相信以上是ArrayList命名所涉及的推理。

    【讨论】:

      【解决方案2】:

      在 Eclipse 中,约定绝对是使用getpattern。自动化工具通过检查和编写 getset 样式访问器来创建和处理 getter。

      【讨论】:

        【解决方案3】:

        对于查询方法,我总是将getXXX 视为提供的东西与计算的东西。 size() 方法返回集合的大小,这是一个派生值,所以它是有意义的。如果你有 getSize() 我的假设是我可以以某种方式设置大小(通过构造函数或设置方法)。

        【讨论】:

        • 你说得很好,但我想说getSize()size() 更有意义可以被认为是List 的(尽管是虚拟的)属性,因为它总是分配给它。
        【解决方案4】:

        使用 JavaBeans 约定(getter 和 setter)通常是个坏主意。
        许多框架通过反射使用它们,特别是在 EL 中,有时您无法在没有权限获取器的情况下访问您的字段(取决于 EL 风格)。

        因此,您的访问器应始终命名为 getXxx()isXxx()setXxx()

        集合框架中的size() 是一个可能会惹恼开发人员的“缺陷”示例(参见下面的链接)。 Josh Bloch 和 Neal Gafter 为使其更具可读性而做出的选择现在在某些情况下很难获得 (EL)。

        但请记住,JavaBeans 约定不是 Java 命名约定。


        资源:

        关于同一主题:

        【讨论】:

        【解决方案5】:

        我更喜欢get/is/set-Convention(尤其是对于ValueObjects/DataObjects),不仅因为它是JavaBeans规范,还因为以下两点。

        1. 方法的明确前缀将与属性相关的方法与“逻辑”方法分开。
        2. 您可以开箱即用地使用 JSP 和采用此命名的其他框架。

        【讨论】:

          【解决方案6】:

          这只是 Colin HERBERT 回答的一个形成性补充,在我看来,这就足够了:

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

          结合一个 accessor 和一个 mutator 会给你一个 JavaBean 属性。 JavaBeans 本质上不被认为是不可变的,但是如果你想让它不可变,你应该为 mutator 方法使用以下签名:public YourJavaBean withProperty(Type value)。请注意,这应该始终返回具有复制属性值的全新 YourJavaBean 实例。

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              猜你喜欢
              • 2019-03-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-10-27
              • 2021-12-04
              • 1970-01-01
              • 2020-03-12
              • 1970-01-01
              相关资源
              最近更新 更多