Java 中 getter/setter 的命名约定

问题描述 投票:0回答:7

如果我有以下私人会员:

private int xIndex;

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

getXindex()
setXindex(int value)

getxIndex()
setxIndex(int value)

编辑:或

getXIndex()
setXIndex(int value);

java naming-conventions javabeans getter-setter
7个回答
40
投票

正确答案是

getxIndex()
setxIndex(int value)

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


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不是单词。在极少数情况下,当这会形成单词或首字母缩略词时,它会产生误导性,例如方法

setiMessage
最 可能与SETI无关。 使用唯一有效的代码质量衡量标准(WTF 每分钟), 我认为这是糟糕的代码

如果我们修改它以遵循约定 命名一个方法它将是:

// According to Java naming convention
public int getXIndex() { return xIndex; }
public void setXIndex(int xIndex) { this.xIndex = xIndex; }

为什么JavaBeans规范违反了约定?这一切都归结为 JavaBeans 规范中的这句话:

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

我不清楚这到底是指什么大写名称。字段名称应根据 约定,采用驼峰式格式。它似乎 对我来说,我们生成非常规方法名称是为了支持由 a 决定的非常规字段名称 20 多年前的文档。

还应该注意的是,尽管看起来工具中对 JavaBeans 规范的支持是压倒性的, 它并不是专门使用的。例如。 Kotlin 不会将

xIndex
识别为上例中的属性。反之,则 Kotlin 属性
var xIndex = 0
将生成 Java 方法
getXIndex
setXIndex
。这似乎是一个错误 根据 JetBrains 支持,但我不知道他们如何在不进行重大更改的情况下解决这个问题。

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

那么我们什么时候应该遵循 JavaBeans 规范? 属性名称何时应该由访问器通过以下工具推断出来: 依赖这个标准,那么我们可能想要使用它。例如,Jackson将依赖 除非我们使用注释,否则通过

xIndex
getxIndex
方法访问属性
setxIndex

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

如果我愿意,我们将使用正常的命名约定,即

getXIndex
setXIndex
。但是,考虑到国家 总而言之,我看到的最好的解决方案是@vaxquis建议的:

将您的字段命名为“indexX”或其他任何名称,您的问题就解决了...不要使事情过于复杂 - 即使 setxIndex 对于 Beans 来说,这是正确的方法,使用名为 setxIndex 的方法会增加代码的 WTF 系数,但不会给您带来任何麻烦。 任何回报。

任何有关 JavaBeans 规范的评论都应根据规范本身发送至 [email protected].


5
投票

应该是:

getXIndex()
setXIndex(final int xIndex)

1
投票

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


0
投票

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


0
投票

Eclipse ide 自动生成 setter 和 getter,如下所示:

getxIndex()
setxIndex(int value)

这是根据java beans API规范。


-2
投票

我认为

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

© www.soinside.com 2019 - 2024. All rights reserved.