Java中的Getters/Setter的命名约定
-
05-10-2019 - |
题
如果我有以下私人成员:
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规范 (例如,通过$ {object.xindex}在JSP中访问它们。
其他提示
依据 Javabeans API规格1997年正如托马斯·埃恩沃勒(Thomas Einwaller)所描述的那样。
private int xIndex;
public int getxIndex() { return xIndex; }
public void setxIndex(int xIndex) { this.xIndex = xIndex; }
这是不幸的, getx 和 setx 不是言语,为罕见的情况而言,是由Intellij生成的代码也会受到Intellij的警告。因此,尽管这符合Javabeans规格,但它违反了公约命名方法。在极少数情况下,当这会形成单词或缩写时,它将是虚假的,例如该方法setiMessage
很可能与 seti。使用 代码质量的唯一有效测量 (每分钟WTF),我评估 这是不良代码.
这一切都取决于Javabeans规范的这句话:
但是,为了支持偶尔使用所有上案例名称,我们检查名称的前两个字符是否既是高层案例又是一个单独的。
我尚不清楚我所指的所有上案例名称的用途尚不清楚。字段名称应根据惯例, ,是骆驼壳。在我看来,我们生成了非常规方法名称,以支持20岁以上文件决定的非常规的字段名称。
还应注意的是,即使它似乎是对工具中Javabeans规范的压倒性支持,但并非仅使用。例如。科特林不会认识 xIndex
作为上述示例中的属性。相反,Kotlin属性 var xIndex = 0
将导致Java方法 getXIndex
和 setXIndex
. 。根据喷气桥的支持,这似乎是一个错误,但是我看不到它们如何解决这个问题而不进行破坏。
一些支持Javabeans规范的工具并非总是如此,例如 杰克逊和 Swagger代码生成器 已修补以符合它。即使Intellij根据Javabeans规范生成登录器, 例子在文档中与之不同。可能是因为人们不了解标准,并且自然更喜欢正常方法命名约定。
那么,我们什么时候应该遵循Javabeans规格? 当属性名称应由依赖此标准的工具推断出属性名称时,我们可能需要使用它。例如, 杰克逊 将依靠财产 xIndex
被访问 getxIndex
和 setxIndex
除非我们使用注释,否则方法。
我们什么时候应该避免此标准? 根据我的建议:当人类应阅读和理解代码时。因为当命名方法是虚假信息时,不使用适当的骆驼壳。
如果我能以自己的方式采用它,我们将使用普通的命名约定,即 getXIndex
和 setXIndex
. 。但是,鉴于事物的状态,我看到的最好的解决方案是@vaxquis建议的:
将您的字段命名为“ indexx”或其他任何内容,您的问题已经解决...不要过度复杂化 - 即使setxIndex是bean的正确方法,使用命名setxIndex的方法会增加代码的WTF因子,而无需给您任何东西。 。
关于Javabeans规范的任何评论,应根据规范本身发送到Java-beans@java.sun.com。
应该:
getXIndex()
setXIndex(final int xIndex)
方法应该是动词,在混合情况下与第一个字母小写,每个内部单词都大写的第一个字母。
您应该使用Introspector.decatietize从包装java.beans中使用,并且您没有问题,因为它符合Java规则。
Eclipse IDE会自动生成设定器和Getters:
getxIndex()
setxIndex(int value)
根据Java Beans API规范。
我认为 getXindex()
是最好的方法。 Getter应该从“ Get”开始,其次是会员名称,其首字母大写。我还听说过的最新惯例,说我们应该避开多个大写字母。例如 getHTMLtooltip
是错的。它应该是 getHtmlTooltip
反而。您也应该尝试使所有成员 final
而且不需要设置器,因为班级将是不可变的;)