logo

Препратки към Java метод

Java предоставя нова функция, наречена препратка към метод в Java 8. Препратката към метод се използва за препращане към метод на функционален интерфейс. Това е компактна и лесна форма на ламбда израз. Всеки път, когато използвате ламбда израз просто за препращане към метод, можете да замените своя ламбда израз с препратка към метод. В този урок ние обясняваме подробно концепцията за референтен метод.


Видове препратки към методите

В Java има следните типове препратки към методи:

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

1) Препратка към статичен метод

Можете да се обърнете към статичен метод, дефиниран в класа. Следва синтаксисът и примерът, които описват процеса на рефериране на статичен метод в Java.

Синтаксис

как да отворите скрити приложения на android
 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 за препращане към статичен метод.

шаблон за проектиране на фабричен метод
 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) Препратка към метод на екземпляр

като статичните методи, можете също да препращате методи на екземпляри. В следващия пример ние описваме процеса на препращане на метода на екземпляра.

Синтаксис

низ за чат
 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(); } } 
Тествайте сега

Изход:

java replaceall
 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