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