我確定必須有一個標準的方法來做到這一點,但我的搜索Stackoverflow的嘗試失敗了。如何重構以避免將「特殊值」傳遞給Java方法?
我有這樣的方法:
public void processSomeWidgetsForUser(int userItemId) {
Iterator<Widgets> iter = allWidgets.values().iterator();
while(iter.hasNext()) {
Widget thisWidget = iter.next();
if (userItemId == -1 || thisWidget.getUsersItemId() == userItemId) {
widget.process();
}
}
}
正如你可以看到-1是一種「特殊價值」,意思是過程中的所有。這樣做可以節省在另一個名爲processSomeWidgetsForAllUsers的方法中重複循環代碼。
但我不喜歡這樣的特殊值,因爲它們很容易誤用或誤解,這正是我現在必須解決的情況(有人認爲-1意味着別的東西)。
我只能想到兩種方法來改善這一點。
- 具有恆定的,包含-1稱爲像 Widget.ALLWIDGETS這至少是自記錄文件,但使用不 停止代碼-1(如果有人在整合舊代碼, 例如)
- 更改方法將所有用戶ID列表設置爲 進程,該進程可以爲空,但看起來不太好 性能明智(需要首先檢索所有用戶ID,然後通過 如果列表中的小部件數量在 之間變化,則會發生什麼情況:retreiving the id和
有沒有更好的方法?我確定我錯過了一些明顯的東西。
上面的代碼已經稍微改變了,所以可能無法編譯,但你應該明白了。
我喜歡這種方法,因爲它更清晰(無幻數),但我會簡單地拋出任何已知無效ID一個IllegalArgumentException。沒有檢查異常是必需的(但javadoc輸入限制)。 – Robin
你說得很對,我會修改答案! – lynks
謝謝 - 它很好地處理了錯誤的調用,並且很清楚。 –