В Java оператор ::, называемый оператором ссылки на метод (method reference), используется для передачи ссылки на метод в качестве аргумента в другой метод или выражение. Он обеспечивает компактный и выразительный способ передачи логики или функциональности вместо явного написания лямбда-выражения.
Существует несколько форм записи оператора ссылки на метод в Java:
Ссылка на статический метод: ClassName::staticMethodName
Ссылка на метод экземпляра: objectReference::instanceMethodName
Ссылка на метод конструктора: ClassName::new
Ссылка на метод массива: ArrayType[]::methodName
Примеры использования оператора ссылки на метод:
Ссылка на статический метод:
// Пример использования оператора ссылки на статический методList<String> names =Arrays.asList("Alice","Bob","Charlie");names.forEach(System.out::println); // Вывод каждого элемента списка на консоль
Ссылка на метод экземпляра:
// Пример использования оператора ссылки на метод экземпляраString str ="Hello, world";Function<Integer,String> substringFunction = str::substring; // Получение ссылки на метод substringString result =substringFunction.apply(7); // Вызов метода substring(7) на строке strSystem.out.println(result); // Вывод результата на консоль: "world"
Ссылка на метод конструктора:
// Пример использования оператора ссылки на метод конструктораSupplier<String> supplier = String::new; // Получение ссылки на конструктор класса StringString emptyString =supplier.get(); // Вызов конструктора String() для создания пустой строкиSystem.out.println(emptyString); // Вывод пустой строки на консоль
Ссылка на метод массива:
// Пример использования оператора ссылки на метод массиваFunction<Integer,int[]> arrayCreator =int[]::new; // Получение ссылки на метод создания массиваint[] newArray =arrayCreator.apply(5); // Создание массива из 5 элементов