Java中getter/setter的命名约定
如果我有以下私人会员:Java中getter/setter的命名约定,java,naming-conventions,javabeans,getter-setter,Java,Naming Conventions,Javabeans,Getter Setter,如果我有以下私人会员: private int xIndex; 我应该如何命名我的getter/setter: getXindex() setXindex(int value) 或 编辑:或 getXIndex() setXIndex(int value); ?应该是: getXIndex() setXIndex(final int xIndex) 我认为getXindex()是最好的方法。getter应该以“get”开头,后跟成员名,首字母大写。还有我听说的最新惯例,说我们应该避免一个
private int xIndex;
我应该如何命名我的getter/setter:
getXindex()
setXindex(int value)
或
编辑:或
getXIndex()
setXIndex(int value);
?应该是:
getXIndex()
setXIndex(final int xIndex)
我认为
getXindex()
是最好的方法。getter应该以“get”开头,后跟成员名,首字母大写。还有我听说的最新惯例,说我们应该避免一个接一个地使用多个大写字母。例如,getHTMLtooltip
是错误的。它应该是getHtmlTooltip
。此外,您应该尝试将所有成员设置为final,并且不需要设置器,因为类是不可变的;) 方法应该是动词,混合大小写,第一个字母小写,每个内部单词的第一个字母大写 正确答案是
getxIndex()
setxIndex(int value)
如果您希望根据第8.8节:推断名称的大小写将它们用作属性(例如,通过${object.xIndex}访问它们)在JSP中。您应该使用包java.beans中的Introspector.decapitalize,因为它符合java规则,所以您没有问题。Eclipse ide自动生成setter和getter,如下所示:
getxIndex()
setxIndex(int value)
它符合java beans API规范。符合
正如Thomas Einwaller所描述的:
// According to JavaBeans API specification
public int getxIndex() { return xIndex; }
public void setxIndex(int xIndex) { this.xIndex = xIndex; }
不幸的是,getx和setx不是单词。在极少数情况下,当这会形成一个单词或首字母缩略词时,它会造成信息失真,例如方法setiMessage
most
可能与此无关。
使用(每分钟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规范的工具并不总是这样做,例如
并进行了修补以符合其要求。
尽管IntelliJ根据JavaBeans规范生成访问器,但是
文档中的内容与此不同。可能是因为人们不了解标准,自然更喜欢
常规方法命名约定
那么我们什么时候应该遵循JavaBeans规范呢?什么时候应该由访问器通过
依赖这个标准,我们可能会想使用它。例如,将依赖
通过getxIndex
和setxIndex
方法访问的属性xIndex
,除非我们使用注释
我们什么时候应该避免这个标准?根据我的建议:代码什么时候应该被人类阅读和理解。
因为在命名方法不具信息性时不使用适当的驼峰大小写
如果按照我的方式,我们将使用正常的命名约定,即getXIndex
和setXIndex
当然,我看到的最好的解决方案是@vaxquis:
将您的字段命名为“indexX”或其他任何名称,您的问题就解决了…不要使事情过于复杂-即使setxIndex
是bean的正确方法,使用名为setxIndex的方法会增加代码的WTF因子,而不会给您
任何回报
根据规范本身,任何关于JavaBeans规范的评论都应该发送到
爪哇-beans@java.sun.com.@m_pGladiator:re immutable:虽然这显然是可取的,但并不是所有类都可以变为不可变的。当然,setter应该只在需要时出现。@Simon:主要原因是线程安全。如果一个类是不可变的,那么通过单独的线程进行并发修改就不会出现问题,我没有阅读“javabeans”标签。beans体系结构假定getter和setter,不支持immutabilityDownvote,因为问题中提到的情况在规范中指定,请参阅其他答案。如果这是正确答案,为什么IDE(tested Intellij,read Eclipse)生成其他东西?它们生成getxIndex()和setxIndex()。有人能澄清一下吗?不正确,这些getter不符合Java Bean命名约定。这个答案不正确,@ThomasEinwaller的答案是,因为这是明确规定的,我们不需要争论:)我写了一篇博客文章:我认为这不正确。第8.8节涉及从方法名称推断的属性名称的大小写。这个问题询问的是基于属性名命名方法的反向过程。javadoc for Inspector.decapitalize()声明它是一个“获取字符串并将其转换为普通Java变量名的方法”,而不是本例中的方法名。@SotiriosDelimanolis您引用的规范中的句子大约是大写。因此,它不应该在这里应用。您必须考虑“另一种方式”:如果您要使getter getXIndex成为decapitalize方法,那么decapitalize方法将查看XIndex并确定没有任何东西需要去资本化——因此它返回XInde
// According to Java naming convention
public int getXIndex() { return xIndex; }
public void setXIndex(int xIndex) { this.xIndex = xIndex; }