Как и в случае с Guava 10, MapMaker.softKeys
устарел, а соответствующий метод не существует в CacheBuilder
.
Почему было сделано это изменение? Что мне нужно сделать с существующим кодом, который его использует?
Как и в случае с Guava 10, MapMaker.softKeys
устарел, а соответствующий метод не существует в CacheBuilder
.
Почему было сделано это изменение? Что мне нужно сделать с существующим кодом, который его использует?
Я написал вопрос, потому что изначально я действительно задавался вопросом, почему (поскольку у меня был существующий код, который использовал softKeys
). Однако причина была очевидна при отражении, и я решил опубликовать ее здесь, если кто-то еще использует softKeys
и задавался вопросом то же самое.
Короче говоря, причина в том, что softKeys
никогда не имел никакого смысла в первую очередь. Таким образом, его первоначальное включение было само по себе ошибкой, которое разработчики Guava исправляют с помощью устаревания.
В общем, вы используете мягкие ссылки, если хотите, чтобы объект оставался немного после того, как все сильные ссылки исчезли; напротив, со слабыми ссылками, объект обычно собирается вскоре после того, как нет сильных или мягких ссылок. Это полезно для кешированных значений, которые вы хотите временно удерживать, чтобы поиск с использованием соответствующего ключа "оживил" сильную ссылку для значения.
Однако это поведение не имеет никакого смысла для ключей:
softKeys
и weakKeys
используют поиск на основе идентификации, единственный способ получить интересную запись - это сильная ссылка на его ключ. † Таким образом, один раз нет сильных ключевых ссылок слева, запись фактически мертва (без возможности возрождения).softKeys
и weakKeys
заключается в том, как долго запись остается на карте после исчезновения всех сильных ссылок на ее ключ. Так как такие записи все равно мертвы, использование softKeys
вместо weakKeys
только задерживает выселение записи без уважительной причины.Таким образом, в большинстве случаев при использовании кода, использующего softKeys
, гораздо более подходящей заменой является weakKeys
.
† Я не рассматриваю случай извлечения записи через итерацию или что-то другое, кроме ключевого поиска, поскольку карты в основном связаны с операциями на основе клавиш.
Вот моя попытка объяснения проблемы (немного более полная ответа Криса)
http://groups.google.com/group/guava-discuss/browse_thread/thread/764af1e627d6fa0e?pli=1