logo

Referencie metódy Java

Java poskytuje novú funkciu nazývanú referencia metódy v jazyku Java 8. Odkaz na metódu sa používa na odkaz na metódu funkčného rozhrania. Ide o kompaktnú a jednoduchú formu lambda expresie. Zakaždým, keď používate výraz lambda len na odkazovanie na metódu, môžete výraz lambda nahradiť odkazom na metódu. V tomto návode podrobne vysvetľujeme koncept referenčnej metódy.


Typy odkazov na metódy

V jazyku Java existujú nasledujúce typy odkazov na metódy:

  1. Odkaz na statickú metódu.
  2. Odkaz na metódu inštancie.
  3. Odkaz na konštruktéra.
Typy referencií metódy Java

1) Odkaz na statickú metódu

Môžete odkazovať na statickú metódu definovanú v triede. Nasleduje syntax a príklad, ktoré popisujú proces odkazovania na statickú metódu v jazyku Java.

sú modelové príklady

Syntax

 ContainingClass::staticMethodName 

Príklad 1

V nasledujúcom príklade sme definovali funkčné rozhranie a odkázali sme statickú metódu na jej funkčnú metódu 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(); } } 
Vyskúšajte to

Výkon:

 Hello, this is static method. 

Príklad 2

V nasledujúcom príklade používame preddefinované funkčné rozhranie Runnable na odkazovanie statickej metódy.

 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(); } } 
Vyskúšajte to

Výkon:

 Thread is running... 

Príklad 3

Môžete tiež použiť preddefinované funkčné rozhranie na odkazovanie metód. V nasledujúcom príklade používame rozhranie BiFunction a jeho metódu 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); } } 
Vyskúšajte to

Výkon:

 30 

Príklad 4

Môžete tiež prepísať statické metódy odkazovaním na metódy. V nasledujúcom príklade sme definovali a preťažili tri metódy pridávania.

 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); } } 
Vyskúšajte to

Výkon:

 30 30.0 30.0 

2) Odkaz na metódu inštancie

ako statické metódy, môžete tiež odkazovať na metódy inštancie. V nasledujúcom príklade popisujeme proces odkazovania na metódu inštancie.

Syntax

pyspark sql
 containingObject::instanceMethodName 

Príklad 1

V nasledujúcom príklade uvádzame nestatické metódy. Metódy môžete odkazovať podľa objektu triedy a anonymného objektu.

 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(); } } 
Vyskúšajte to

Výkon:

upraviť súbor linux
 Hello, this is non-static method. Hello, this is non-static method. 

Príklad 2

V nasledujúcom príklade hovoríme o inštancii (nestatickej) metóde. Spustiteľné rozhranie obsahuje iba jednu abstraktnú metódu. Môžeme ho teda použiť ako funkčné rozhranie.

 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(); } } 
Vyskúšajte to

Výkon:

 Hello, this is instance method 

Príklad 3

V nasledujúcom príklade používame rozhranie BiFunction. Je to preddefinované rozhranie a obsahuje funkčnú metódu apply(). Tu odkazujeme na metódu pridania na aplikáciu metódy.

 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); } } 
Vyskúšajte to

Výkon:

 30 

3) Odkaz na konštruktéra

Konštruktor môžete odkázať pomocou kľúčového slova new. Tu odkazujeme na konštruktor pomocou funkčného rozhrania.

Syntax

 ClassName::new 

Príklad

 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'); } } 
Vyskúšajte to

Výkon:

 Hello