2012-03-17 84 views
1

我有一個變量,名爲具有不同返回類型的吸氣劑是否具有吸氣劑的資格?

List<String> names;

,如果我有一個像

Iterator getNames() { return names.iterator(); }

的方法是在技術上還是一個getter方法,因爲我把它改爲迭代器?

+2

我不明白爲什麼不 – Jeffrey 2012-03-17 04:36:21

+0

我問,因爲這不是在由我的單元測試覆蓋的代碼顯示。所以我處於一個兩難的境地,不管我是否需要爲它寫一個單元測試用例?因爲我們通常不會爲Getters和Setter編寫測試用例嗎? – sriram 2012-03-17 04:38:24

回答

4

即使JDK允許這一點,它不是一個好主意,做它。

其一,有基於斷你的方法命名的慣例是對他們的一些依賴。

  1. JavaBean對象使用getter和setter來設置bean屬性。如果他們違反公約,該計劃將失敗。見JavaBeans spec, section 8.3.1

  2. JSON對象 - 的JSONObject類使用構造函數中的存取方法。 請參閱:http://www.json.org/javadoc/org/json/JSONObject.html#JSONObject(java.lang.Object

  3. 如果某些JPA實現具有多個具有相同名稱但返回類型不同的getter,它們將錯誤地處理您的實體類。

我敢打賭,有更多的依賴關係,但即使這些並不適用於您的解決方案,它仍然是明智的做法是遵循可讀性的原因的慣例。你不希望任何其他開發者在未來的某個時候詛咒你破壞標準:)

2

好像從設計的角度來看一個壞主意給我。

我只想有一個getter public List<String> getNames()

對於「安全發佈」,你應該考慮在執行返回列表的副本

public List<String> getNames() { 
    return new ArrayList<String>(names); 
} 
+1

[不可修改列表](http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#unmodifiableList(java.util.List))也不會是一個可怕的想法。它會阻止任何呼叫你的getter的人,認爲他們可以通過他們獲得的List來添加/改變名字,而不是你的班級中正確的方法。 – Jeffrey 2012-03-17 04:43:46

+0

是的,但是如果我們返回一個List,那麼使用這個的方法也必須是list類型。將來如果我們在稍後的時間點改變變量的類型來說數組。這意味着我必須改變getter方法的返回類型。這反過來會影響正在使用它的方法。 – sriram 2012-03-17 04:45:08

2

如果類是要通過一些綠豆工具內省,getNames()應該返回名。 爲了清楚起見,稱之爲它是什麼:

getNamesIterator(); 
1

你在想另一種方式。 getXxx格式的方法是getter。 Java約定並不意味着你必須有一個名爲xxx的字段。這是您的班級業務,封裝僅提供:能夠將您的數據結構隱藏到其他類中的能力。

對不起,錯字,移動..