Як зазначають інші, причина, чому get()тощо, не є загальною, оскільки ключ запису, який ви шукаєте, не повинен бути того ж типу, що і об'єкт, до якого ви переходите get(); специфікація методу вимагає лише рівності. Це випливає з того, як equals()метод приймає в об'єкті параметр, а не просто той самий тип, що і об'єкт.
Хоча може бути правдою, що багато класів equals()визначили так, що його об'єкти можуть бути рівними лише об'єктам власного класу, на Яві є багато місць, де це не так. Наприклад, специфікація List.equals()говорить про те, що два об'єкти List рівні, якщо вони обидва Списки і мають однаковий вміст, навіть якщо вони різні реалізації List. Так що, повертаючись до прикладу в цьому питанні, в відповідності зі специфікацією методи можна мати Map<ArrayList, Something>і для мене , щоб зателефонувати get()з в LinkedListякості аргументу, і він повинен отримати ключ , який представляє собою список з тим же вмістом. Це було б неможливо, якби get()були загальні та обмежили його тип аргументу.