Java中getter / setter的命名约定

时间:2010-06-01 08:01:14

标签: java naming-conventions javabeans getter-setter

如果我有以下私人会员:

private int xIndex;

我应该如何命名我的getter / setter:

getXindex()
setXindex(int value)

getxIndex()
setxIndex(int value)

编辑:或

getXIndex()
setXIndex(int value);

8 个答案:

答案 0 :(得分:33)

正确的答案是

getxIndex()
setxIndex(int value)

如果您希望将它们用作属性{strong> 8.8:JavaBeans API specification的推断名称的大写 (例如通过$ {object访问它们) JSP中的.xIndex}。

答案 1 :(得分:6)

根据JavaBeans API specification from 1997 它应该像Thomas Einwaller所描述的那样。

private int xIndex;
public int getxIndex() { return xIndex; }
public void setxIndex(int xIndex) { this.xIndex = xIndex; }

这很不幸, getx setx 都不是单词,因为极少数情况下IntelliJ生成的代码也是 IntelliJ收到警告。因此,虽然这符合JavaBeans规范,但它违反了惯例 naming a method。 在极少数情况下,这将形成一个单词或首字母缩略词,它将是消息性的,例如方法setiMessage 可能与SETI无关。 使用the only valid measurement of code quality(每分钟WTF), 我评估这是错误的代码

这一切都归结为JavaBeans规范的这句话:

  

但是为了支持偶尔使用所有大写名称,我们检查名称的前两个字符是否为     大写,如果是这样,请不要管它。

对我来说,所指的所有大写名称究竟是什么样的用法都不清楚。根据,字段名称应该是 convention,骆驼套。它似乎 对我来说,我们生成非常规的方法名称,以支持由a决定的非常规字段名称 20岁以上的文件。

还应该注意的是,即使它似乎是对工具中JavaBeans规范的压倒性支持, 它不是专门使用的。例如。在上面的例子中,Kotlin不会将xIndex识别为属性。相反, Kotlin属性var xIndex = 0将生成Java方法getXIndexsetXIndex。这似乎是一个错误 根据JetBrains的支持,但我没有看到如何在不做出突破性改变的情况下解决这个问题。

一些支持JavaBeans规范的工具并非总能如此,例如Jackson 并且Swagger Code Generator已经修补以符合它。 即使IntelliJ根据JavaBeans规范生成访问器,example 在文档中与它不同。可能是因为人们不了解标准,自然更喜欢 常规方法命名约定。

那么我们何时应该遵循JavaBeans规范?当属性名称应该由访问者通过工具来推断时 依靠这个标准,那么我们可能想要使用它。例如,Jackson将依赖 除非我们使用注释,否则通过xIndexgetxIndex方法访问属性setxIndex

我们何时应该避免使用此标准?根据我的建议:当人们阅读和理解代码时。 因为当命名方法具有杀戮性时,不要使用适当的驼峰套管。

如果我按照自己的方式使用,我们会使用常规命名约定,即getXIndexsetXIndex。但是,鉴于国家 事情,我看到的最好的解决方案是由@vaxquis建议的:

  

为您的字段命名" indexX"或者其他什么,你的问题就解决了......不要过于复杂 - 即使是setxIndex     对于Beans来说是正确的方法,使用名为setxIndex的方法会增加代码的WTF因子而不会给你     任何回报。

根据规范本身,有关JavaBeans规范的任何注释都应发送给 java-beans@java.sun.com。

答案 2 :(得分:4)

应该是:

getXIndex()
setXIndex(final int xIndex)

答案 3 :(得分:1)

方法应该是动词,混合大小写,首字母小写,每个内部单词的首字母大写。

答案 4 :(得分:0)

你应该使用java.beans包中的Introspector.decapitalize,因为它符合java规则你没有问题。

答案 5 :(得分:0)

Eclipse ide自动生成setter和getter:

getxIndex()
setxIndex(int value)

这是根据java beans API规范。

答案 6 :(得分:0)

正确答案是:

getXIndex();
setXIndex(int value);

JAVA SE8 Oracle Certification Associate的屏幕截图: enter image description here

答案 7 :(得分:-2)

我认为getXindex()是最好的方法。 getter应以'get'开头,后跟成员名称,首字母大写。我听说过最新的公约,说我们应该一个接一个地避免多个大写字母。例如getHTMLtooltip是错误的。它应该是getHtmlTooltip。你也应该尝试让你的所有成员final,并且不需要setter,因为这个类是不可变的;)