logo

Посилання на метод Java

Java надає нову функцію, яка називається посиланням на метод у Java 8. Посилання на метод використовується для посилання на метод функціонального інтерфейсу. Це компактна і проста форма лямбда-виразу. Кожного разу, коли ви використовуєте лямбда-вираз лише для посилання на метод, ви можете замінити лямбда-вираз посиланням на метод. У цьому посібнику ми детально пояснюємо концепцію посилання на метод.


Типи методичних посилань

У java існують такі типи посилань на методи:

  1. Посилання на статичний метод.
  2. Посилання на метод екземпляра.
  3. Посилання на конструктор.
Типи посилань на методи Java

1) Посилання на статичний метод

Ви можете посилатися на статичний метод, визначений у класі. Нижче наведено синтаксис і приклад, які описують процес посилання на статичний метод у Java.

Синтаксис

уцінка підкреслити
 ContainingClass::staticMethodName 

Приклад 1

У наступному прикладі ми визначили функціональний інтерфейс і посилаємо статичний метод на його функціональний метод say().

 interface Sayable{ void say(); } public class MethodReference { public static void saySomething(){ System.out.println('Hello, this is static method.'); } public static void main(String[] args) { // Referring static method Sayable sayable = MethodReference::saySomething; // Calling interface method sayable.say(); } } 
Перевірте зараз

Вихід:

 Hello, this is static method. 

Приклад 2

У наступному прикладі ми використовуємо попередньо визначений функціональний інтерфейс Runnable для посилання на статичний метод.

спробуйте блок catch у java
 public class MethodReference2 { public static void ThreadStatus(){ System.out.println('Thread is running...'); } public static void main(String[] args) { Thread t2=new Thread(MethodReference2::ThreadStatus); t2.start(); } } 
Перевірте зараз

Вихід:

 Thread is running... 

Приклад 3

Ви також можете використовувати попередньо визначений функціональний інтерфейс для посилання на методи. У наступному прикладі ми використовуємо інтерфейс BiFunction і використовуємо його метод apply().

 import java.util.function.BiFunction; class Arithmetic{ public static int add(int a, int b){ return a+b; } } public class MethodReference3 { public static void main(String[] args) { BiFunctionadder = Arithmetic::add; int result = adder.apply(10, 20); System.out.println(result); } } 
Перевірте зараз

Вихід:

 30 

Приклад 4

Ви також можете перевизначити статичні методи за допомогою посилальних методів. У наступному прикладі ми визначили та перевантажили три методи додавання.

 import java.util.function.BiFunction; class Arithmetic{ public static int add(int a, int b){ return a+b; } public static float add(int a, float b){ return a+b; } public static float add(float a, float b){ return a+b; } } public class MethodReference4 { public static void main(String[] args) { BiFunctionadder1 = Arithmetic::add; BiFunctionadder2 = Arithmetic::add; BiFunctionadder3 = Arithmetic::add; int result1 = adder1.apply(10, 20); float result2 = adder2.apply(10, 20.0f); float result3 = adder3.apply(10.0f, 20.0f); System.out.println(result1); System.out.println(result2); System.out.println(result3); } } 
Перевірте зараз

Вихід:

 30 30.0 30.0 

2) Посилання на метод екземпляра

як і статичні методи, ви також можете посилатися на методи екземплярів. У наступному прикладі ми описуємо процес посилання на метод екземпляра.

Синтаксис

java ітерація карти
 containingObject::instanceMethodName 

Приклад 1

У наступному прикладі ми маємо на увазі нестатичні методи. Ви можете посилатися на методи через об’єкт класу та анонімний об’єкт.

 interface Sayable{ void say(); } public class InstanceMethodReference { public void saySomething(){ System.out.println('Hello, this is non-static method.'); } public static void main(String[] args) { InstanceMethodReference methodReference = new InstanceMethodReference(); // Creating object // Referring non-static method using reference Sayable sayable = methodReference::saySomething; // Calling interface method sayable.say(); // Referring non-static method using anonymous object Sayable sayable2 = new InstanceMethodReference()::saySomething; // You can use anonymous object also // Calling interface method sayable2.say(); } } 
Перевірте зараз

Вихід:

словник c#
 Hello, this is non-static method. Hello, this is non-static method. 

Приклад 2

У наступному прикладі ми посилаємося на екземпляр (не статичний) метод. Виконуваний інтерфейс містить лише один абстрактний метод. Отже, ми можемо використовувати його як функціональний інтерфейс.

 public class InstanceMethodReference2 { public void printnMsg(){ System.out.println('Hello, this is instance method'); } public static void main(String[] args) { Thread t2=new Thread(new InstanceMethodReference2()::printnMsg); t2.start(); } } 
Перевірте зараз

Вихід:

 Hello, this is instance method 

Приклад 3

У наступному прикладі ми використовуємо інтерфейс BiFunction. Це попередньо визначений інтерфейс і містить функціональний метод apply(). Тут ми маємо на увазі метод додавання для застосування методу.

 import java.util.function.BiFunction; class Arithmetic{ public int add(int a, int b){ return a+b; } } public class InstanceMethodReference3 { public static void main(String[] args) { BiFunctionadder = new Arithmetic()::add; int result = adder.apply(10, 20); System.out.println(result); } } 
Перевірте зараз

Вихід:

 30 

3) Посилання на конструктор

Ви можете посилатися на конструктор, використовуючи ключове слово new. Тут ми маємо на увазі конструктор за допомогою функціонального інтерфейсу.

Синтаксис

 ClassName::new 

приклад

 interface Messageable{ Message getMessage(String msg); } class Message{ Message(String msg){ System.out.print(msg); } } public class ConstructorReference { public static void main(String[] args) { Messageable hello = Message::new; hello.getMessage('Hello'); } } 
Перевірте зараз

Вихід:

 Hello