Sim*_*mon 32 java naming-conventions javabeans getter-setter
如果我有以下私人会员:
private int xIndex;
Run Code Online (Sandbox Code Playgroud)
我该如何命名我的getter/setter:
getXindex()
setXindex(int value)
Run Code Online (Sandbox Code Playgroud)
要么
getxIndex()
setxIndex(int value)
Run Code Online (Sandbox Code Playgroud)
编辑:或
getXIndex()
setXIndex(int value);
Run Code Online (Sandbox Code Playgroud)
?
Tho*_*ler 33
正确的答案是
getxIndex()
setxIndex(int value)
Run Code Online (Sandbox Code Playgroud)
如果您希望将它们用作属性,请参见第8.8节: JavaBeans API规范的推断名称的大写(例如,通过JSP中的$ {object.xIndex}访问它们.
根据1997年的JavaBeans API规范, 它应该像Thomas Einwaller所描述的那样.
private int xIndex;
public int getxIndex() { return xIndex; }
public void setxIndex(int xIndex) { this.xIndex = xIndex; }
Run Code Online (Sandbox Code Playgroud)
这很不幸,getx和setx都不是单词,因为IntelliJ生成的代码也很少被IntelliJ警告.因此,虽然这符合JavaBeans规范,但它违反了命名方法的约定
.在罕见的情况下,这将形成一个单词或首字母缩略词,它将是消息性的,例如,该方法setiMessage很可能与SETI无关.使用唯一有效的代码质量测量值(每分钟WTF),我评估这是错误的代码.
这一切都归结为JavaBeans规范的这句话:
但是为了支持偶尔使用所有大写名称,我们检查名称的前两个字符是否都是大写,如果是这样,请不要管它.
究竟是什么样的使用所指的所有大写名称对我来说都不清楚.根据惯例,字段名称应该 是驼峰式的.在我看来,我们生成非常规的方法名称,以支持20世纪20年前的文件所决定的非常规字段名称.
还应该注意的是,尽管它似乎是对工具中JavaBeans规范的压倒性支持,但并不是专门使用它.例如.xIndex在上面的例子中,Kotlin不承认属性.相反,Kotlin属性var xIndex = 0将导致Java方法getXIndex和setXIndex.根据JetBrains的支持,这似乎是一个错误,但我没有看到如何在不做出突破性改变的情况下修复它.
一些支持JavaBeans规范的工具并不总是如此,例如Jackson 和Swagger Code Generator已被修补以符合它.尽管IntelliJ根据JavaBeans规范生成访问器 ,但文档中的示例与之不同.可能是因为人们不了解标准并且自然喜欢正常的方法命名约定.
那么我们何时应该遵循JavaBeans规范?当属性名称应由访问者通过依赖此标准的工具推断时,我们可能希望使用它.例如,杰克逊将依赖于xIndex通过getxIndex和setxIndex方法访问的财产,除非我们使用注释.
什么时候应该避免这个标准?根据我的建议:当人们阅读和理解代码时.因为在命名方法是消息时不使用适当的驼峰套管.
如果我按照自己的方式使用它,我们将使用正常的命名约定,即getXIndex和setXIndex.但是,鉴于事态,我看到的最佳解决方案是由@vaxquis提出的:
将你的字段命名为"indexX"或其他任何东西,你的问题就解决了......不要过于复杂化 - 即使setxIndex是Beans的正确方法,使用名为setxIndex的方法会增加代码的WTF因子,而不会给你任何回报.
根据规范本身,有关JavaBeans规范的任何注释都应发送到java-beans@java.sun.com.
小智 5
应该:
getXIndex()
setXIndex(final int xIndex)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15062 次 |
| 最近记录: |