В дни до дженериков все контейнеры работали с объектами Object.
Обязанности программиста - убедиться, что все, что он помещает в контейнер, совместимых типов.
В этом случае оно не должно быть слишком проблематичным, если существуют различные классы объектов, используемых в качестве ключей, поскольку HashMap
опирается на hashCode
и equals
методов, и те не бросают исключения, если они правильно написаны.
В случае, если метод equals
не переопределен, он, вероятно, использует Object equals
, который в основном сравнивает ссылки. Но следует отметить, что такие классы, как Integer и Date, имеют свои собственные методы equals
. Однако они не будут верны ни для чего, что не относится к одному классу.
Настоящая проблема с такими коллекциями заключается в том, что когда вы извлекаете что-либо из них, вы должны быть абсолютно уверены, что получили правильный тип.
Так что в прежние времена было много if (o instanceof MyClass) then...
, где были задействованы коллекции, и программист не имел контроля над типами объектов.
Вот почему дженерики были изобретены.
Ориентировочные значения. * Shudder *. –
Нет проблем. Но если вам нужно поддерживать большую унаследованную систему, начните с добавления дженериков. Обновление API с использованием устаревших меток. Используйте FindBugs. Потому что любое исключение должно быть связано с некоторой ошибкой. –