Предположим, у вас есть этот код:
Map<Foo, Bar> map = new HashMap<Foo, Bar>();
Foo foo = new Foo();
Bar bar = new Bar();
map.put(foo, bar);
Bar barReturned = map.get(foo);
Требуется ли в Java barReturned == bar
? То есть Java требует , чтобы barReturned
был таким же экземпляром , что и bar
? Если нет, какая семантика ожидается?
Javadoc предполагает, что barReturned == bar
должно быть правдой, но я не уверен на 100%:
V get(Object key)
Возвращает значение, которому сопоставлен указанный ключ, или null
, если эта карта не содержит сопоставления для ключа.
Более формально, если эта карта содержит отображение ключа k
на значение v
, такое, что (key==null ? k==null : key.equals(k))
, тогда этот метод возвращает v
; в противном случае возвращается null
. (Может быть не более одного такого отображения.)
Если эта карта допускает значения null
, то возвращаемое значение NULL не обязательно обязательно указывает, что карта не содержит сопоставления для ключа; также возможно, что карта явно отображает ключ на null
. Операция containsKey может использоваться для различения этих двух случаев.
Параметры:
key
- ключ, значение которого должно быть возвращено
Возвращает:
ЗНАЧЕНИЕ, НА КОТОРОЕ УКАЗАНО УКАЗАННЫЙ КЛЮЧ , или null
, если эта карта не содержит сопоставления для ключа
(Акцент мой)
Редактировать: Я понимаю, что реализации Map
, поставляемые в комплекте со стандартной библиотекой, придерживаются семантики barReturned == bar
. То, что я хочу знать, является ли это обязательным согласно документации. Например, я должен также придерживаться этой семантики, если я напишу свой собственный класс, который реализует Map
?