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().