Gymterview
junior

Какие виды ссылок на методы вы знаете?

Существует четыре вида ссылок на методы в Java 8. Каждый вид соответствует определённому способу вызова метода и имеет свой синтаксис.

Вид Синтаксис Пример
На статический метод ClassName::staticMethod Integer::parseInt
На метод конкретного экземпляра instance::method System.out::println
На метод произвольного экземпляра данного типа ClassName::instanceMethod String::toLowerCase
На конструктор ClassName::new ArrayList::new

Разница между вторым и третьим видом: при ссылке на конкретный экземпляр (instance::method) объект уже известен, и первый аргумент лямбды передаётся в метод. При ссылке через тип (ClassName::instanceMethod) первый аргумент лямбды становится объектом-получателем вызова (this), а остальные аргументы передаются в метод.

На собеседовании: интервьюеры часто ожидают именно четыре вида, а не три. Третий вид (ссылка на instance-метод через имя класса) — самый неочевидный, и его стоит пояснить на примере: String::length эквивалентен s -> s.length().