Ссылка на метод
Ссылка на метод (method reference) - это
сокращенная форма записи лямбда-выражения,
которая позволяет передать уже существующий
метод в качестве реализации функционального
интерфейса. Ссылка на метод использует
оператор ::. В левой части оператора
указывается класс или объект, а в правой -
имя метода без круглых скобок. Компилятор
автоматически подставляет аргументы в
соответствии с сигнатурой функционального
интерфейса.
Синтаксис
Класс::имяМетода
объект::имяМетода
Класс::new
Пример
Давайте передадим ссылку на статический метод
Integer.parseInt в функциональный интерфейс
Function:
import java.util.function.Function;
public class Main
{
public static void main(String[] args)
{
Function<String, Integer> func = Integer::parseInt;
Integer res = func.apply("12345");
System.out.println(res);
}
}
Результат выполнения кода:
12345
Пример
Давайте передадим ссылку на метод экземпляра
toUpperCase класса String:
import java.util.function.Function;
public class Main
{
public static void main(String[] args)
{
Function<String, String> func = String::toUpperCase;
String res = func.apply("abcde");
System.out.println(res);
}
}
Результат выполнения кода:
"ABCDE"
Пример
Давайте передадим ссылку на метод экземпляра конкретного объекта:
import java.util.function.Supplier;
public class Main
{
public static void main(String[] args)
{
String str = "abcde";
Supplier<String> sup = str::toUpperCase;
String res = sup.get();
System.out.println(res);
}
}
Результат выполнения кода:
"ABCDE"
Пример
Давайте передадим ссылку на конструктор
класса ArrayList:
import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;
public class Main
{
public static void main(String[] args)
{
Supplier<List<String>> sup = ArrayList::new;
List<String> res = sup.get();
res.add("a");
res.add("b");
System.out.println(res);
}
}
Результат выполнения кода:
[a, b]
Пример
Давайте передадим ссылку на метод экземпляра
произвольного объекта через BiFunction:
import java.util.function.BiFunction;
public class Main
{
public static void main(String[] args)
{
BiFunction<String, String, Boolean> func = String::startsWith;
Boolean res = func.apply("abcde", "abc");
System.out.println(res);
}
}
Результат выполнения кода:
true
Пример
Давайте используем ссылку на метод вместе
с методом forEach:
import java.util.List;
public class Main
{
public static void main(String[] args)
{
List<String> list = List.of("a", "b", "c", "d", "e");
list.forEach(System.out::println);
}
}
Результат выполнения кода:
"a"
"b"
"c"
"d"
"e"
Смотрите также
-
ключевое слово
lambda,
которое является полной формой записи ссылки на метод -
ключевое слово
import static,
которое позволяет импортировать статические методы -
ключевое слово
new,
которое используется для создания объектов -
ключевое слово
this,
которое ссылается на текущий объект