Что может находиться справа от оператора :: (method reference) в Java?

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

Ответ

Оператор :: (method reference) создает ссылку на метод или конструктор без его выполнения. Справа от него может находиться:

  1. Статический метод — ClassName::staticMethod
  2. Метод экземпляра конкретного объекта — object::instanceMethod
  3. Метод экземпляра произвольного объекта данного типа — ClassName::instanceMethod (первый аргумент становится целевым объектом)
  4. Конструктор — ClassName::new

Примеры использования:

// 1. Ссылка на статический метод
Function<String, Integer> parser = Integer::parseInt;

// 2. Ссылка на метод конкретного объекта
String str = "example";
Supplier<Integer> lengthSupplier = str::length;

// 3. Ссылка на метод произвольного объекта
Function<String, String> upperCase = String::toUpperCase;

// 4. Ссылка на конструктор
Supplier<List<String>> listSupplier = ArrayList::new;
BiFunction<Integer, Integer, Point> pointCreator = Point::new;

Почему это полезно: Сокращает шаблонный код при работе с лямбда-выражениями и функциональными интерфейсами, улучшая читаемость.