Ответ
Оператор :: (method reference) создает ссылку на метод или конструктор без его выполнения. Справа от него может находиться:
- Статический метод —
ClassName::staticMethod - Метод экземпляра конкретного объекта —
object::instanceMethod - Метод экземпляра произвольного объекта данного типа —
ClassName::instanceMethod(первый аргумент становится целевым объектом) - Конструктор —
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;
Почему это полезно: Сокращает шаблонный код при работе с лямбда-выражениями и функциональными интерфейсами, улучшая читаемость.