Что такое метод референс java

Ссылочные типы и примеры методов Java

Ссылка на метод Java была введена в Java 8 вместе с лямбда-выражениями. Ссылка на метод-это быстрый способ создания лямбда-выражений, когда он

Ссылка на метод Java была введена в Java 8 вместе с лямбда-выражениями. Ссылка на метод-это быстрый способ создания лямбда-выражений, когда он просто вызывает метод.

Что такое Ссылка на метод Java?

Ссылка на метод позволяет нам создать лямбда-выражение из существующего метода. Он используется, когда лямбда – выражение вызывает функцию и больше ничего не делает. JVM заботится о создании лямбда-выражения путем сопоставления входных переменных с аргументами метода.

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

Ссылка на метод состоит из двух частей – класса/объекта и метода/конструктора. Они разделены двойными двоеточиями (::). Дополнительные параметры, передаваемые со ссылкой на метод, отсутствуют.

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

В Java существует четыре типа ссылок на методы.

Ссылочные типы методов Java

Примеры ссылок на методы Java

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

1. Ссылка на Статический Метод

Допустим, у нас есть функциональный интерфейс, как показано ниже.

У нас есть класс Utils для получения количества элементов в массиве.

Мы будем использовать лямбда-выражение для вызова метода Utils class count Elements (), чтобы получить количество элементов в массиве.

Здесь лямбда-выражение просто вызывает статический метод класса Utils и больше ничего не делает. Это идеальное место для использования ссылки на метод для вызова статического метода.

2. Ссылка на Метод Экземпляра объекта

Давайте изменим реализацию класса Utils и создадим метод экземпляра.

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

Мы можем заменить лямбда-выражение ссылкой на метод экземпляра.

Мы можем создать экземпляр класса Utils в самой ссылке на метод.

3. Ссылка на метод экземпляра произвольного объекта

Иногда мы вызываем метод аргумента в лямбда-выражении. В этом случае мы можем использовать ссылку на метод для вызова метода экземпляра произвольного объекта определенного типа.

Допустим, у нас есть такое лямбда-выражение.

Здесь лямбда-выражение просто вызывает метод. Итак, мы можем использовать ссылку на метод здесь. Но метод вызывается для произвольного объекта String. Таким образом, мы можем вызвать метод экземпляра, обратившись к классу String.

4. Ссылка на метод Конструктора

Метод Stream collect() принимает аргумент поставщика. Поставщик должен каждый раз возвращать новый экземпляр. Таким образом, лямбда-выражение должно вызывать конструктор. Давайте рассмотрим простой пример.

Что ж, нам не нужно здесь останавливаться. Два других лямбда-выражения также могут быть заменены ссылкой на метод.

Источник

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

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

Вступление

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

Лямбда-выражения избавили от необходимости вводить громоздкий шаблонный код, когда речь заходит о некоторых распространенных задачах, позволяя разработчикам вызывать их без принадлежности к классу и передавать их так, как если бы они были объектами.

Эти выражения широко используются в API Java Streams и фреймворке Spring Web Flux для создания реактивных динамических приложений.

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

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

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

Читайте также:  Что такое мутизм его особенности

И распространенным примером может быть распечатка результатов, скажем, подписки на службу издателя или поток Java:

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

Мы проведем простой урок:

Запуск этого кода приведет к:

Здесь класс anonymous ( Компаратор ) определяет критерии сравнения. Мы можем сделать это намного проще и короче, используя лямбда-выражение:

Запуск этого фрагмента кода приведет к:

Опять же, поскольку все, что мы делаем с этим лямбда-выражением, – это вызываем один метод, мы можем ссылаться только на этот метод:

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

Ссылки на методы могут использоваться в нескольких различных сценариях:

Давайте рассмотрим все эти типы на нескольких простых примерах.

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

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

Давайте определим класс с помощью статического метода, а затем сошлемся на него из другого класса:

А теперь, из другого класса, давайте воспользуемся статическим служебным методом:

Запуск этого фрагмента кода приведет к:

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

Методы экземпляра конкретных объектов

Git Essentials

Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!

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

Чаще всего это иллюстрируется с помощью специального компаратора. Мы будем использовать тот же Сотрудник класс, что и раньше, и тот же список, чтобы подчеркнуть разницу между этими двумя:

Теперь давайте определим Пользовательский компаратор :

И, наконец, давайте составим список и отсортируем его:

Выполнение этого кода также приведет к:

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

Методы экземпляра произвольных объектов

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

Хотя, для пущей убедительности, поскольку этот подход используется очень часто, давайте рассмотрим другой пример:

Запуск этого фрагмента кода приведет к:

Хотя это может показаться, что это то же самое, что вызов статического метода, это не так. Это эквивалентно вызову лямбда – выражения:

Ссылки На Конструкторы

Вы можете ссылаться на конструктор класса так же, как на статический метод.

Вы можете использовать ссылку на конструктор вместо классического создания экземпляра класса:

В зависимости от контекста, если присутствует несколько конструкторов, при ссылке будет использоваться соответствующий:

Из-за потока имен, если присутствует Сотрудник(строковое имя) конструктор, он будет использоваться.

Если бы мы попытались, скажем:

Мы можем избежать этого с помощью:

И с этим мы получаем результат:

Вывод

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

Лямбда-выражения познакомили разработчиков Java с более функциональным подходом к программированию, который позволяет им избегать написания подробного кода для простых операций.

Источник

Method References

You use lambda expressions to create anonymous methods. Sometimes, however, a lambda expression does nothing but call an existing method. In those cases, it’s often clearer to refer to the existing method by name. Method references enable you to do this; they are compact, easy-to-read lambda expressions for methods that already have a name.

Читайте также:  Что такое кукла барби

Consider again the Person class discussed in the section Lambda Expressions:

Suppose that the members of your social networking application are contained in an array, and you want to sort the array by age. You could use the following code (find the code excerpts described in this section in the example MethodReferencesTest ):

The method signature of this invocation of sort is the following:

Notice that the interface Comparator is a functional interface. Therefore, you could use a lambda expression instead of defining and then creating a new instance of a class that implements Comparator :

Because this lambda expression invokes an existing method, you can use a method reference instead of a lambda expression:

Kinds of Method References

There are four kinds of method references:

Kind Syntax Examples
Reference to a static method ContainingClass::staticMethodName Person::compareByAge
MethodReferencesExamples::appendStrings
Reference to an instance method of a particular object containingObject::instanceMethodName myComparisonProvider::compareByName
myApp::appendStrings2
Reference to an instance method of an arbitrary object of a particular type ContainingType::methodName String::compareToIgnoreCase
String::concat
Reference to a constructor ClassName::new HashSet::new

All the System.out.println() statements print the same thing: Hello World!

BiFunction is one of many functional interfaces in the java.util.function package. The BiFunction functional interface can represent a lambda expression or method reference that accepts two arguments and produces a result.

Reference to a Static Method

The method references Person::compareByAge and MethodReferencesExamples::appendStrings are references to a static method.

Reference to an Instance Method of a Particular Object

The following is an example of a reference to an instance method of a particular object:

Reference to an Instance Method of an Arbitrary Object of a Particular Type

The following is an example of a reference to an instance method of an arbitrary object of a particular type:

Reference to a Constructor

The functional interface Supplier contains one method get that takes no arguments and returns an object. Consequently, you can invoke the method transferElements with a lambda expression as follows:

You can use a constructor reference in place of the lambda expression as follows:

Источник

BestProg

Ссылки на методы. Виды ссылок на методы. Ссылка на статический метод. Ссылка на метод экземпляра

Содержание

Поиск на других ресурсах:

1. Ссылки на методы. Связь лямбда-выражений со ссылками на методы. Виды ссылок на методы

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

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

В Java различают 4 вида ссылок на методы:

2. Ссылка на статические методы
2.1. Общая форма ссылок на статические методы. Разделитель ::

В языке Java можно объявлять ссылки на статические методы. Ссылка на статический метод может быть передана в некоторый метод и там использована для вызова статического метода.

Общая форма объявления ссылки на статический метод следующая:

Разделитель :: внедрен в версии JDK 8 для определения ссылки на метод.

Читайте также:  Что такое один бис

Например. Если в классе A объявлен статический метод с именем Method()

то ссылка на этот метод будет следующей

2.2. Примеры ссылок на статические методы
2.2.1. Ссылка на статический метод вычисления объема шара

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

Решение. При решении данной задачи нужно разработать следующие элементы:

Текст программы, решения данной задачи, следующий.

Результат выполнения программы

2.2.2. Ссылка на обобщенный статический метод реверсирования массива чисел

Решение. Последовательность шагов, которые нужно выполнить чтобы решить задачу:

Текст программы, решающий данную задачу, следующий

Результат выполнения программы

3. Ссылка на методы экземпляра
3.1. Общая форма ссылки на методы экземпляра

Чтобы объявить ссылку на метод экземпляра используется одна из двух общих форм:

В другом случае метод экземпляра указывается вмести з любым объектом данного класса, а не только с указанным объектом.

3.2. Примеры использования ссылок на методы экземпляра
3.2.1. Ссылка на методы, выполняющие действия над комплексными числами

Условие задачи. Продемонстрировать передачу в некоторый метод класса методов суммирования и вычитания комплексных чисел.

Решение. Для решения задачи в программе необходимо разработать следующие элементы (составляющие).

2. Функциональный интерфейс для оперирования типом Complex

3. Класс, содержащий собственно методы обработки комплексных чисел (суммирование, вычитание).

5. Класс, демонстрирующий использование ссылки на метод экземпляра

Ниже приведен текст решения задачи.

Результат выполнения программы

3.2.2. Ссылка на обобщенный метод экземпляра

Условие задачи. Реализовать класс, содержащий следующие обобщенные (шаблонные) методы работы с массивами:

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

Решение.

Разница в вызовах заключается в передаче первого параметра, которым есть ссылка на метод экземпляра. В первом случае передается метод экземпляра, который вычисляет среднее арифметическое по следующему синтаксису

В другом случае передается метод экземпляра

который вычисляет сумму.

После запуска на выполнение программа выдаст следующий результат

Источник

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

Данная статья написана командой Vertex Academy. Это одна из статей из нашего Учебника по Java 8. Надеемся, что данная статья Вам будет полезна. Приятного прочтения!

В этой статье мы рассмотрим ссылки на методы в Java 8

1. Введение

С приходом Java 8 стало возможным писать код в декларативном стиле с помощью ссылок на методы. По сути, это та же лямбда, только круче 🙂

Для использования необходимо написать оператор ::

2. forEach

Ссылки на методы позволяют упростить код

Работают ссылки на методы при условии, что параметры вызываемого метода и параметры в лямбде совпадают.

3. Function

Cобственный метод и лямбда

Cобственный метод и ссылка на метод

4. Конструкторы

Помимо методов, так же можно передавать ссылки на конструкторы.

Для этого создадим класс User

и интерфейс UserFactory

Теперь же, вместо реализации интерфейса используем ссылку на конструктор User

5. Больше примеров

5.1 Function composition

Ссылки на методы смотрятся еще лучше при цепочке обращений.

Где мы сначала декларативно описываем необходимые действия, и уже после вызываем всю цепочку.

5.2 Comparator

Создадим класс User

И тепер вывести отсортированный список не составляет труда (и кода)

Где мы отсортировали список по имени

Надеемся, что наша статья была Вам полезна. Также есть возможность записаться на наши курсы по Java в Киеве. Детальную информацию Вы можете найти у нас на сайте.

Источник

Информ портал о технике и не только