Ссылки на методы в Java
- Что такое ссылки на методы
- Ссылка на статический метод
- Ссылка на нестатический метод конкретного объекта
- Ссылка на нестатический метод любого объекта конкретного типа
- Ссылка на конструктор
1. Что такое ссылки на методы
Если лямбда выражения вызывают только один существующий метод, лучше ссылаться на этот метод по его имени. Ссылки на методы (Method References) – это компактные лямбда выражения для методов у которых уже есть имя. Например:
Consumer<String> consumer = str -> System.out.println(str);
можно переписать с помощью method references:
Consumer<String> consumer = System.out::println; Ссылки на методы бывают четырех видов:
| Тип | Пример |
| Ссылка на статический метод | ContainingClass::staticMethodName |
| Ссылка на нестатический метод конкретного объекта | containingObject::instanceMethodName |
| Ссылка на нестатический метод любого объекта конкретного типа | ContainingType::methodName |
| Ссылка на конструктор | ClassName::new |
2. Ссылка на статический метод
Синтаксис:
ContainingClass::staticMethodName Например:
Function<String, Boolean> function = e -> Boolean.valueOf(e);
System.out.println(function.apply("TRUE")); Перепишем с помощью ссылки:
Function<String, Boolean> function = Boolean::valueOf;
System.out.println(function.apply("TRUE")); 3. Ссылка на нестатический метод конкретного объекта
Синтаксис:
containingObject::instanceMethodName Этот тип используется когда лямбда выражение вызывает метод внешнего уже существующего объекта.
Например:
Consumer<String> consumer = e -> System.out.println(e);
consumer.accept("OCPJP 8"); Перепишем, используя ссылку:
Consumer<String> consumer = System.out::println;
consumer.accept("OCPJP 8"); Еще один пример:
Integer integer = 5;
Supplier<String> supplier = () -> integer.toString();
System.out.println(supplier.get()); Перепишем:
Integer integer = 5;
Supplier<String> supplier = integer::toString;
System.out.println(supplier.get()); 4. Ссылка на нестатический метод любого объекта конкретного типа
Синтаксис:
ContainingType::methodName Например:
Function<String, String> function = s -> s.toLowerCase();
System.out.println(function.apply("OCPJP 8")); Перепишем:
Function<String, String> function = String::toLowerCase;
System.out.println(function.apply("OCPJP 8")); 5. Ссылка на конструктор
Синтаксис:
ClassName::new ClassName не может быть абстрактным классом или интерфейсом.
Например:
Function<String, Integer> function = (d) -> new Integer(d);
System.out.println(function.apply("4")); Перепишем:
Function<String, Integer> function = Integer::new;
System.out.println(function.apply("4"));
Курс 'Java для начинающих' на Udemy
Зарегистрируйтесь или войдите, чтобы иметь возможность оставить комментарий.