我正在閱讀Hashtable的代碼,並且我瞭解到Hashtable的鍵和值都不能爲null,但它的equals方法測試值爲null的情況。爲什麼Hashtable的equals方法測試值爲null的情況
public synchronized boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof Map))
return false;
Map<K,V> t = (Map<K,V>) o;
if (t.size() != size())
return false;
try {
Iterator<Map.Entry<K,V>> i = entrySet().iterator();
while (i.hasNext()) {
Map.Entry<K,V> e = i.next();
K key = e.getKey();
V value = e.getValue();
if (value == null) { // Can Hashtable's value be null?
if (!(t.get(key)==null && t.containsKey(key)))
return false;
} else {
if (!value.equals(t.get(key)))
return false;
}
}
} catch (ClassCastException unused) {
return false;
} catch (NullPointerException unused) {
return false;
}
return true;
}
它可能是未來的目的,他們可以擴展功能。但是根據良好的編程指南,您總是需要檢查NPE – Reddy
不要指望標準庫的代碼是完美的 - 它可能只是寫它的人沒有考慮它。 – Jesper
爲什麼要讀一個類的代碼,它的使用已經被阻止了將近十年____? – fge