Эти классы действительно необходимы, только если кто-то использует (или не использует) дженерики.Он дублирует проверки во время выполнения, которые должны быть достаточными для выполнения во время компиляции через гарантии безопасности типов механизмом обобщений.
В результате использование этих методов действительно очень интересно только в контексте разработчиков API, которые нене доверяйте пользователям библиотеки и хотите защитить себя или пользователей от неправомерного использования карты пользователями.
Вот в чем суть: если ваш код компилируется без необработанных предупреждений типа или каких-либо непроверенныхпредупреждения о конверсиях / типах: гарантировано , что методы checked*
не дают вам никакой выгоды;они являются только хитом во время выполнения.
Редактировать
Похоже, вы пришли к выводу, что, поскольку remove
, get
и т. д. работают на Object
, оникак-то небезопасно.Они не.Ни один из этих методов не сохранит свой операнд на карте, так что вы определенно не ставите под угрозу безопасность типов самой карты.Эти методы принимают объект по одной основной причине: для обратной совместимости.Никогда не было каких-либо строгих требований, чтобы при поиске нужно было придерживаться одного и того же класса.Например, если экземпляр класса A и экземпляр класса B могут как-то быть равны друг другу, поместите a
в карту и затем вызовите remove(b)
, следует удалить отображение a
.
Это поведение необходимо было поддерживать после добавления обобщений для сохранения обратной совместимости.Таким образом, они не могли обновить интерфейс до чего-то вроде remove(K)
, так как существующий код может полагаться на возможность удалить отображение, учитывая экземпляр совершенно другого класса.Однако он не является небезопасным, и использование проверенной версии карты не меняет этого поведения ни в малейшей степени.