Совместимость.
До того, как дженерики были доступны, был только get (Object o).
Если бы они изменили этот метод, чтобы получить (<K> o), это потенциально привело бы к массовому обслуживанию кода для пользователей Java только для того, чтобы снова скомпилировать рабочий код.
Они могли бы ввести дополнительный метод, скажем, get_checked (<K> o) и отказаться от старого метода get (), чтобы был более мягкий путь перехода. Но по какой-то причине это не было сделано. (Ситуация, в которой мы сейчас находимся, заключается в том, что вам нужно установить такие инструменты, как findBugs, чтобы проверить совместимость типов между аргументом get () и объявленным типом ключа <K> карты.)
Я думаю, что аргументы, относящиеся к семантике .equals (), являются поддельными. (Технически они правильные, но я все еще думаю, что они фальшивые. Ни один здравомыслящий дизайнер никогда не сделает так, чтобы o1.equals (o2) был истинным, если у o1 и o2 нет общего суперкласса.)