Получить доступ

Что такое bridge-метод в Java?

SeniorДженерики
Коротко

Bridge-метод — синтетический метод, который компилятор добавляет, чтобы переопределение работало после стирания типов. Класс с compare(String, String) реализует стёртый compare(Object, Object) из Comparator — мост с такой сигнатурой приводит аргументы и вызывает настоящий метод.

  • Виден в рефлексии: Method.isBridge()
  • Появляется и при ковариантном возвращаемом типе
  • Из-за моста ClassCastException может прийти из «невидимой» строки

А ещё Именно так полиморфизм сохраняется при стёртых дженериках

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Когда вы реализуете обобщённый интерфейс (Comparator<String>) конкретным типом, стёртая сигнатура надкласса compare(Object,Object) расходится с вашей compare(String,String). Чтобы вызов через ссылку на интерфейс попадал в вашу версию, компилятор генерирует мост compare(Object,Object), который кастит аргументы и зовёт вашу реализацию. Такие методы помечены isBridge()/isSynthetic() и иногда видны в стектрейсах.

Что хотят услышать

  • Зачем нужен мост.
  • Пример с Comparator.

Частые ошибки

  • Принимать bridge-метод в стектрейсе за свой код.
  • Путать его с default-методом.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Синтетический метод, который компилятор генерирует, чтобы переопределение работало после стирания (мост compare(Object,Object), вызывающий вашу compare(String,String))
  • ✗Метод, соединяющий два потока через очередь
  • ✗default-метод интерфейса
  • ✗Нативный метод, реализованный на C

Что спросят дальше

  • Как отличить bridge-метод через рефлексию?
  • Почему стирание вообще требует мостов?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем