Зарегистрируйтесь, чтобы продолжить обучение

Ссылки на методы (Method References) Java: Функции

Ссылка на метод (Method Reference) – это сокращенная форма лямбда выражения для вызова методов. То есть это синтаксический сахар, который делает код короче и проще для чтения. Рассмотрим это на примере. Представьте, что у нас есть список элементов, который мы хотим распечатать на экран. Код, выполняющий эту задачу, может выглядеть так:

var langs = List.of("ruby", "php", "python", "javascript");
langs.forEach((lang) -> System.out.println(lang));

Этот же код можно сделать короче, передавая в метод forEach() ссылку на println():

var langs = List.of("ruby", "php", "python", "javascript");
langs.forEach(System.out::println);

Поначалу такой синтаксис кажется непривычным. Со временем в вашем коде будет много лямбда-функций и обработки коллекций. Вы привыкнете к синтаксису и увидите, насколько этот способ привлекателен своей лаконичностью.

Общий синтаксис ссылки на метод выглядит так:

Name::methodName

Где Name может быть как объектом так и классом, в зависимости от того, ссылку на что мы хотим получить и как это будет использовано потом. Ниже варианты, которые мы можем использовать. В комментариях показаны эквиваленты с использованием лямбда-функций:

objectName::methodName // (v) -> objectName.methodName(v)
ClassName::staticMethodName // (v) -> ClassName.staticMethodName(v)
ClassName::methodName // (v) -> v.methodName()

Последний пример часто применяется с Comparator при сортировках:

var words = new ArrayList<>(List.of("pear", "apple", "banana"));

words.sort(Comparator.comparingInt(String::length));
// Эквивалент
// words.sort((w1, w2) -> Integer.compare(w1.length(), w2.length()));
System.out.println(words); // Outputs: [pear, apple, banana]

Больше примеров мы увидим в курсе по стримам, где подобный синтаксис встречается буквально повсеместно.


Дополнительные материалы

  1. Документация по Method References

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff