如果我有以下私人成员:
private int xIndex;
我应该如何命名我的 getter/setter:
getXindex()
setXindex(int value)
或者
getxIndex()
setxIndex(int value)
编辑:或
getXIndex()
setXIndex(int value);
?
如果我有以下私人成员:
private int xIndex;
我应该如何命名我的 getter/setter:
getXindex()
setXindex(int value)
或者
getxIndex()
setxIndex(int value)
编辑:或
getXIndex()
setXIndex(int value);
?
正确答案是
getxIndex()
setxIndex(int value)
如果您希望根据第8.8节将它们用作属性: JavaBeans API 规范的推断名称的大写(例如,通过 JSP 中的 ${object.xIndex} 访问它们。
根据1997 年的 JavaBeans API 规范, 它应该是 Thomas Einwaller 所描述的:
// According to JavaBeans API specification
public int getxIndex() { return xIndex; }
public void setxIndex(int xIndex) { this.xIndex = xIndex; }
这很不幸,getx和setx不是单词。在极少数情况下,这会形成一个单词或首字母缩略词,这将是无用的,例如该方法很可能与SETIsetiMessage
无关。使用唯一有效的代码质量衡量标准(每分钟 WTF 数),我评估这是糟糕的代码。
如果我们修改它以遵循 命名方法的约定,它将是:
// According to Java naming convention
public int getXIndex() { return xIndex; }
public void setXIndex(int xIndex) { this.xIndex = xIndex; }
为什么 JavaBeans 规范违反约定?这一切都归结为 JavaBeans 规范的这句话:
然而,为了支持偶尔使用所有大写名称,我们检查名称的前两个字符是否都是大写的,如果是,则不处理。
我不清楚这指的是所有大写名称的确切用途。按照 惯例,字段名称应该是驼峰式的。在我看来,我们生成非常规方法名称是为了支持 20 多年前的文档所决定的非常规字段名称。
还应该注意的是,尽管它在工具中似乎是对 JavaBeans 规范的压倒性支持,但它并不是专门使用的。例如。在上面的示例中, Kotlin 不会将其识别xIndex
为属性。相反,Kotlin 属性var xIndex = 0
将导致 Java 方法getXIndex
和setXIndex
. 根据 JetBrains 支持,这似乎是一个错误,但我看不到他们如何在不进行重大更改的情况下解决该问题。
一些支持 JavaBeans 规范的工具并不总是这样做,例如Jackson 和Swagger Code Generator已被修补以符合它。尽管 IntelliJ 根据 JavaBeans 规范生成访问器,但文档中的示例 与它不同。可能是因为人们不了解标准,自然更喜欢正常的方法命名约定。
那么我们什么时候应该遵循 JavaBeans 规范呢?当属性名称应该由依赖此标准的工具由访问器推断时,我们可能想要使用它。例如,除非我们使用注释,否则Jackson将依赖xIndex
通过getxIndex
和方法访问的属性。setxIndex
我们什么时候应该避免这个标准?根据我的建议:何时代码应该被人类阅读和理解。因为在命名方法时不使用正确的驼峰式大小写是不具信息性的。
如果我愿意,我们会使用正常的命名约定,即getXIndex
和setXIndex
. 但是,鉴于目前的情况,@vaxquis 建议了我看到的最佳解决方案:
将您的字段命名为“indexX”或其他任何名称,您的问题就解决了......不要过于复杂 - 即使 setxIndex 是 Beans 的正确方法,使用名为 setxIndex 的方法会增加代码的 WTF 因子,而不会给您任何回报.
根据规范本身,有关 JavaBeans 规范的任何评论都应发送至 java-beans@java.sun.com。
应该:
getXIndex()
setXIndex(final int xIndex)
方法应该是动词,混合大小写,首字母小写,每个内部单词的首字母大写。
您应该使用包 java.beans 中的 Introspector.decapitalize 并且没有问题,因为它符合 java 规则。
Eclipse ide 自动生成 setter 和 getter 为:
getxIndex()
setxIndex(int value)
这是根据 java beans API 规范。
我认为getXindex()
是最好的方法。getter 应以“get”开头,后跟成员名称,首字母大写。还有我听说的最新约定,说我们应该避免一个接一个地使用多个大写字母。例如getHTMLtooltip
是错误的。应该是getHtmlTooltip
。此外,您应该尝试创建所有成员final
,并且不需要设置器,因为该类将是不可变的;)