Ответ 1
Я написал вопрос, потому что изначально я действительно задавался вопросом, почему (поскольку у меня был существующий код, который использовал softKeys
). Однако причина была очевидна при отражении, и я решил опубликовать ее здесь, если кто-то еще использует softKeys
и задавался вопросом то же самое.
Короче говоря, причина в том, что softKeys
никогда не имел никакого смысла в первую очередь. Таким образом, его первоначальное включение было само по себе ошибкой, которое разработчики Guava исправляют с помощью устаревания.
В общем, вы используете мягкие ссылки, если хотите, чтобы объект оставался немного после того, как все сильные ссылки исчезли; напротив, со слабыми ссылками, объект обычно собирается вскоре после того, как нет сильных или мягких ссылок. Это полезно для кешированных значений, которые вы хотите временно удерживать, чтобы поиск с использованием соответствующего ключа "оживил" сильную ссылку для значения.
Однако это поведение не имеет никакого смысла для ключей:
- Так как карты
softKeys
иweakKeys
используют поиск на основе идентификации, единственный способ получить интересную запись - это сильная ссылка на его ключ. † Таким образом, один раз нет сильных ключевых ссылок слева, запись фактически мертва (без возможности возрождения). - Единственное практическое различие между
softKeys
иweakKeys
заключается в том, как долго запись остается на карте после исчезновения всех сильных ссылок на ее ключ. Так как такие записи все равно мертвы, использованиеsoftKeys
вместоweakKeys
только задерживает выселение записи без уважительной причины.
Таким образом, в большинстве случаев при использовании кода, использующего softKeys
, гораздо более подходящей заменой является weakKeys
.
† Я не рассматриваю случай извлечения записи через итерацию или что-то другое, кроме ключевого поиска, поскольку карты в основном связаны с операциями на основе клавиш.