Что такое ссылка на метод в Java?

«Что такое ссылка на метод в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Ссылка на метод (method reference) — это компактная запись лямбда-выражения для вызова уже существующего метода. Она передаёт метод как аргумент в функциональный интерфейс, улучшая читаемость кода.

Четыре вида ссылок на методы:

  1. Ссылка на статический метод: ClassName::staticMethodName
  2. Ссылка на метод экземпляра конкретного объекта: objectReference::instanceMethodName
  3. Ссылка на метод экземпляра произвольного объекта: ClassName::instanceMethodName
  4. Ссылка на конструктор: ClassName::new

Пример: преобразование лямбды в ссылку на метод

List<String> names = Arrays.asList("Anna", "Bob", "John");

// Лямбда-выражение:
names.forEach(s -> System.out.println(s));

// Эквивалентная ссылка на метод (более лаконично):
names.forEach(System.out::println);

Почему это работает? Метод println совместим с функциональным интерфейсом Consumer<String>, который ожидает метод с сигнатурой void accept(T t). Компилятор автоматически связывает вызов.