Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Ссылки на методы (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
Рекомендуемые программы
профессия
от 25 000 ₸ в месяц
Разработка приложений на языке Java
10 месяцев
с нуля
Старт 23 мая

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»
Изображение Тото

Задавайте вопросы, если хотите обсудить теорию или упражнения. Команда поддержки Хекслета и опытные участники сообщества помогут найти ответы и решить задачу