Как упоминалось другими, причина, по которой get()
и т. д. не является общей, потому что ключ для записи, которую вы извлекаете, не должен быть того же типа, что и объект, который вы передаете get()
; спецификация метода требует только того, чтобы они были равны. Это следует из того, как метод equals()
принимает параметр Object as, а не только тот же тип, что и объект.
Хотя может быть общепринято, что многие классы имеют equals()
так, чтобы его объекты может быть только равным объектам своего класса, на Java есть много мест, где это не так. Например, в спецификации List.equals()
указано, что два объекта List равны, если они оба являются списками и имеют одно и то же содержимое, даже если они являются разными реализациями List
. Поэтому, возвращаясь к примеру в этом вопросе, согласно спецификации метода возможно иметь Map<ArrayList, Something>
и для меня, чтобы вызвать get()
с аргументом LinkedList
как, и он должен получить ключ, который является список с тем же содержимым. Это было бы невозможно, если get()
были родовыми и ограничивали свой тип аргумента.