[英]Naming convention for getters/setters in Java
如果我有以下私人成員:
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 規范的推斷名稱的大寫(例如,通過 JSP 中的 ${object.xIndex} 訪問它們)用作屬性。
根據1997 年的 JavaBeans API 規范,它應該像 Thomas Einwaller 描述的那樣:
// According to JavaBeans API specification
public int getxIndex() { return xIndex; }
public void setxIndex(int xIndex) { this.xIndex = xIndex; }
不幸的是, getx和setx不是單詞。 在極少數情況下,當這會形成一個單詞或首字母縮略詞時,它會setiMessage
信息,例如setiMessage
方法很可能與SETI無關。 使用唯一有效的代碼質量度量(每分鍾 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
識別為上述示例中的屬性。 var xIndex = 0
,Kotlin 屬性var xIndex = 0
將導致 Java 方法getXIndex
和setXIndex
。 根據 JetBrains 支持,這似乎是一個錯誤,但我看不出他們如何在不進行重大更改的情況下解決該問題。
一些支持 JavaBeans 規范的工具並不總是如此,例如Jackson和Swagger Code Generator已經被修補以符合它。 盡管 IntelliJ 根據 JavaBeans 規范生成訪問器,但文檔中的示例與其不同。 可能是因為人們不了解標准,自然更喜歡正常的方法命名約定。
那么我們什么時候應該遵循 JavaBeans 規范呢? 當訪問器應該通過依賴此標准的工具推斷屬性名稱時,我們可能想要使用它。 例如,除非我們使用注釋,否則Jackson將依賴於通過getxIndex
和setxIndex
方法訪問的屬性xIndex
。
我們什么時候應該避免這個標准? 根據我的建議:什么時候代碼應該被人類閱讀和理解。 因為在命名方法時不使用正確的駝峰式大小寫是誤導性的。
如果我願意,我們將使用正常的命名約定,即getXIndex
和setXIndex
。 但是,鑒於目前的情況,@vaxquis 建議了我看到的最佳解決方案:
將您的字段命名為“indexX”或其他任何名稱,您的問題就解決了......不要使事情過於復雜 - 即使 setxIndex 是 Beans 的正確方法,使用名為 setxIndex 的方法會增加代碼的 WTF 因子而不會給您任何回報.
根據規范本身,任何關於 JavaBeans 規范的評論都應該發送到 java-beans@java.sun.com。
應該:
getXIndex()
setXIndex(final int xIndex)
方法應該是動詞,大小寫混合,首字母小寫,每個內部單詞的首字母大寫。
您應該使用包 java.beans 中的 Introspector.decapitalize 並且您沒有問題,因為它符合 java 規則。
Eclipse ide 自動生成 setter 和 getter 如下:
getxIndex()
setxIndex(int value)
這是根據 java bean API 規范。
我認為getXindex()
是最好的方法。 getter 應以“get”開頭,后跟成員名稱,首字母大寫。 還有我聽說的最新約定,說我們應該一個接一個地避免多個大寫字母。 例如getHTMLtooltip
是錯誤的。 它應該是getHtmlTooltip
。 此外,您應該嘗試使所有成員成為final
成員,並且不需要 setter,因為該類將是不可變的 ;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.