38

如果我有以下私人成员:

private int xIndex;

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

getXindex()
setXindex(int value)

或者

getxIndex()
setxIndex(int value)

编辑:或

getXIndex()
setXIndex(int value);

?

4

7 回答 7

38

正确答案是

getxIndex()
setxIndex(int value)

如果您希望根据第8.8节将它们用作属性: JavaBeans API 规范的推断名称的大写(例如,通过 JSP 中的 ${object.xIndex} 访问它们。

于 2013-04-22T11:36:05.530 回答
10

根据1997 年的 JavaBeans API 规范, 它应该是 Thomas Einwaller 所描述的:

// According to JavaBeans API specification
public int getxIndex() { return xIndex; }
public void setxIndex(int xIndex) { this.xIndex = xIndex; }

这很不幸,getxsetx不是单词。在极少数情况下,这会形成一个单词或首字母缩略词,这将是无用的,例如该方法很可能与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 方法getXIndexsetXIndex. 根据 JetBrains 支持,这似乎是一个错误,但我看不到他们如何在不进行重大更改的情况下解决该问题。

一些支持 JavaBeans 规范的工具并不总是这样做,例如JacksonSwagger Code Generator已被修补以符合它。尽管 IntelliJ 根据 JavaBeans 规范生成访问器,但文档中的示例 与它不同。可能是因为人们不了解标准,自然更喜欢正常的方法命名约定。

那么我们什么时候应该遵循 JavaBeans 规范呢?当属性名称应该由依赖此标准的工具由访问器推断时,我们可能想要使用它。例如,除非我们使用注释,否则Jackson将依赖xIndex通过getxIndex和方法访问的属性。setxIndex

我们什么时候应该避免这个标准?根据我的建议:何时代码应该被人类阅读和理解。因为在命名方法时不使用正确的驼峰式大小写是不具信息性的。

如果我愿意,我们会使用正常的命名约定,即getXIndexsetXIndex. 但是,鉴于目前的情况,@vaxquis 建议了我看到的最佳解决方案:

将您的字段命名为“indexX”或其他任何名称,您的问题就解决了......不要过于复杂 - 即使 setxIndex 是 Beans 的正确方法,使用名为 setxIndex 的方法会增加代码的 WTF 因子,而不会给您任何回报.

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

于 2018-03-18T14:25:32.740 回答
5

应该:

getXIndex()
setXIndex(final int xIndex)
于 2010-06-01T08:03:43.860 回答
1

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

于 2010-06-01T08:55:16.483 回答
0

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

于 2015-02-23T14:59:39.527 回答
0

Eclipse ide 自动生成 setter 和 getter 为:

getxIndex()
setxIndex(int value)

这是根据 java beans API 规范。

于 2016-05-22T18:34:59.210 回答
-2

我认为getXindex()是最好的方法。getter 应以“get”开头,后跟成员名称,首字母大写。还有我听说的最新约定,说我们应该避免一个接一个地使用多个大写字母。例如getHTMLtooltip是错误的。应该是getHtmlTooltip。此外,您应该尝试创建所有成员final,并且不需要设置器,因为该类将是不可变的;)

于 2010-06-01T08:09:48.463 回答