Тема 21. Указатели на методы - BelyiZ/JavaCourses GitHub Wiki

Содержание:

  1. Ссылки на методы
  2. Ссылка на статический метод
  3. Ссылка на нестатический метод конкретного объекта
  4. Ссылка на нестатический метод любого объекта конкретного типа
  5. Ссылка на конструктор
  6. Список литературы/курсов

Ссылки на методы

Ссылки на методы (Method References) - это, по сути, сокращенные лямбда-выражения для методов у которых уже есть имя, используемые для вызова методов.

Отличие использования ссылок на методы от Лямбда-выражений: Лямбда-выражения используется для вызова метода, а ссылки на методы - вызывает (ссылается) на методы с использованием имени метода.

переписать более понятно почему что будет если объект изменится. как будет поведения

Они состоят из двух частей:

Class::method;
FootballTeam<String> footballTeam = Team -> System.out.println(Team);

можно переписать с помощью Method references:

FootballTeam<String> footballTeam = System.out::println;

То есть если лямбда-выражение может быть передано в некоторый метод как параметр, то ссылка на метод также может быть передана в качестве параметра. С помощью этой ссылки можно обращаться к методу не вызывая его.

Преимущества использования: Ссылки на методы – это тип лямбда-выражений, которые используются для простой ссылки на метод в их вызове. С их помощью написание кода может быть намного более кратким и читабельным.

Ссылки на методы бывают четырех видов:

  1. Ссылка на статический метод
ContainingClass::staticMethodName
  1. Ссылка на нестатический метод конкретного объекта
containingObject::instanceMethodName
  1. Ссылка на нестатический метод любого объекта конкретного типа
ContainingType::methodName
  1. Ссылка на конструктор
ClassName::new

Ссылка на статический метод

Синтаксис:

ContainingClass::staticMethodName

Пример:

PlayerInTeam<String, Boolean> playerInTeam = "Алексей Петров" -> Boolean.valueOf("Алексей Петров");
System.out.println( playerInTeam.apply("TRUE"));

Перепишем с помощью ссылки:

PlayerInTeam<String, Boolean> playerInTeam  = Boolean::valueOf;
System.out.println(playerInTeam .apply("TRUE"));

Ссылка на нестатический метод конкретного объекта

Синтаксис:

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());

Ссылка на нестатический метод любого объекта конкретного типа

Синтаксис:

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"));

Ссылка на конструктор

Синтаксис:

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"));

Список литературы/курсов

  1. https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html
  2. https://www.bestprog.net/ru/2020/12/22/java-types-of-method-references-reference-to-methods-ru/v

Тема 20. Лямбды | Оглавление | Тема-22.-Stream

⚠️ **GitHub.com Fallback** ⚠️