Ответ
Ссылка на метод (method reference) — это компактная запись лямбда-выражения для вызова уже существующего метода. Она передаёт метод как аргумент в функциональный интерфейс, улучшая читаемость кода.
Четыре вида ссылок на методы:
- Ссылка на статический метод:
ClassName::staticMethodName - Ссылка на метод экземпляра конкретного объекта:
objectReference::instanceMethodName - Ссылка на метод экземпляра произвольного объекта:
ClassName::instanceMethodName - Ссылка на конструктор:
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). Компилятор автоматически связывает вызов.