簡體   English   中英

Java 中 getter/setter 的命名約定

[英]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; }

不幸的是, getxsetx不是單詞。 在極少數情況下,當這會形成一個單詞或首字母縮略詞時,它會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 方法getXIndexsetXIndex 根據 JetBrains 支持,這似乎是一個錯誤,但我看不出他們如何在不進行重大更改的情況下解決該問題。

一些支持 JavaBeans 規范的工具並不總是如此,例如JacksonSwagger Code Generator已經被修補以符合它。 盡管 IntelliJ 根據 JavaBeans 規范生成訪問器,但文檔中的示例與其不同。 可能是因為人們不了解標准,自然更喜歡正常的方法命名約定。

那么我們什么時候應該遵循 JavaBeans 規范呢? 當訪問器應該通過依賴此標准的工具推斷屬性名稱時,我們可能想要使用它。 例如,除非我們使用注釋,否則Jackson將依賴於通過getxIndexsetxIndex方法訪問的屬性xIndex

我們什么時候應該避免這個標准? 根據我的建議:什么時候代碼應該被人類閱讀和理解。 因為在命名方法時不使用正確的駝峰式大小寫是誤導性的。

如果我願意,我們將使用正常的命名約定,即getXIndexsetXIndex 但是,鑒於目前的情況,@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();
setXIndex(int value);

JAVA SE8 Oracle認證助理的屏幕截圖: 在此處輸入圖像描述

我認為getXindex()是最好的方法。 getter 應以“get”開頭,后跟成員名稱,首字母大寫。 還有我聽說的最新約定,說我們應該一個接一個地避免多個大寫字母。 例如getHTMLtooltip是錯誤的。 它應該是getHtmlTooltip 此外,您應該嘗試使所有成員成為final成員,並且不需要 setter,因為該類將是不可變的 ;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM