En azından kısmen, bir araya getirmenize containsKey
ve get
tek bir görüşmeye izin vermenize inanıyorum . Harita null değerlerini tutabilirse, get
null değerini döndürüp döndürmediğini anlamanın bir yolu yoktur , çünkü bu değer için herhangi bir anahtar yoktur veya yalnızca değer null olduğundan.
Bu neden bir sorun? Çünkü bunu kendiniz yapmanın güvenli bir yolu yok. Aşağıdaki kodu alın:
if (m.containsKey(k)) {
return m.get(k);
} else {
throw new KeyNotPresentException();
}
Yana m
bir eşzamanlı haritasıdır, anahtar k arasına silinebilir containsKey
ve get
yerine istenenden daha tablodaki asla bir null dönmek için bu pasajı neden aramalar KeyNotPresentException
.
Normalde bunu senkronize ederek çözersiniz, ancak eşzamanlı bir harita ile elbette işe yaramaz. Bu nedenle imzasının get
değişmesi gerekiyordu ve bunu geriye dönük olarak uyumlu bir şekilde yapmanın tek yolu, kullanıcının null değerleri ilk etapta girmesini önlemek ve bunu "anahtar bulunamadı" için yer tutucu olarak kullanmaya devam etmekti.