Re: [翻譯] Java Collection API 的怪事

作者: AmosYang (泛用人型編碼器)   2013-03-22 17:16:20
※ 引述《PsMonkey (痞子軍團團長)》之銘言:
: 重點在於,`UnmodifiableCollection` 並沒有實作 `hashCode()` 跟 `equals()`,
: 所以當你要一個 `UnmodifiableCollection` 作 `hashCode()` 時,
: 會直接使用 `Object` 的 `hashCode()`。
這個題目很有意思
與其說 UnmodifiableCollection 沒有實作 hashCode 與 equals
更精確的說法是: UnmodifiableCollection 沒辦法有意義地實作 hashCode 與 equals
原因在於 delegate pattern: UnmondifiableCollection 與其原本的 Collection
之間是 has-a 而非 is-a 的關係
原文裡舉了以下這個例子
List L = { /* a list of things */ }
Collection C1 = L.unmodifiableCollection();
Collection C2 = L.unmodifiableList();
bool B1 = C1.equals(C2);
bool B2 = C2.equals(C1);
這時候
1. 在 Java 裡, B1 與 B2 必須有一樣的結果
2. List.equals(x) 規定, 如果 x 不是 List, 那就不能傳回 true
3. C2 是個 List
4. C1 只是個 Collection
因為 #2, 3, 4, 所以 B2 必須傳回 false

Links booklink

Contact Us: admin [ a t ] ucptt.com