В 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; // Получение ссылки на метод substring
String result = substringFunction.apply(7); // Вызов метода substring(7) на строке str
System.out.println(result); // Вывод результата на консоль: "world"
Ссылка на метод конструктора:
// Пример использования оператора ссылки на метод конструктора
Supplier<String> supplier = String::new; // Получение ссылки на конструктор класса String
String emptyString = supplier.get(); // Вызов конструктора String() для создания пустой строки
System.out.println(emptyString); // Вывод пустой строки на консоль
Ссылка на метод массива:
// Пример использования оператора ссылки на метод массива
Function<Integer, int[]> arrayCreator = int[]::new; // Получение ссылки на метод создания массива
int[] newArray = arrayCreator.apply(5); // Создание массива из 5 элементов