logo

Referenties van Java-methoden

Java biedt een nieuwe functie genaamd methodereferentie in Java 8. Methodereferentie wordt gebruikt om naar de methode van de functionele interface te verwijzen. Het is een compacte en gemakkelijke vorm van lambda-expressie. Elke keer dat u de lambda-expressie gebruikt om alleen maar naar een methode te verwijzen, kunt u uw lambda-expressie vervangen door een methodereferentie. In deze zelfstudie leggen we het methodereferentieconcept in detail uit.


Soorten methodereferenties

Er zijn de volgende typen methodereferenties in Java:

  1. Verwijzing naar een statische methode.
  2. Verwijzing naar een instantiemethode.
  3. Verwijzing naar een constructor.
Soorten Java-methodereferenties

1) Verwijzing naar een statische methode

U kunt verwijzen naar de statische methode die in de klasse is gedefinieerd. Hieronder volgen de syntaxis en het voorbeeld die het proces beschrijven van het verwijzen naar een statische methode in Java.

Syntaxis

 ContainingClass::staticMethodName 

voorbeeld 1

In het volgende voorbeeld hebben we een functionele interface gedefinieerd en verwijzen we een statische methode naar zijn functionele methode 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(); } } 
Test het nu

Uitgang:

 Hello, this is static method. 

Voorbeeld 2

In het volgende voorbeeld gebruiken we de vooraf gedefinieerde functionele interface Runnable om naar de statische methode te verwijzen.

Linux-opdrachten
 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(); } } 
Test het nu

Uitgang:

 Thread is running... 

Voorbeeld 3

U kunt ook een vooraf gedefinieerde functionele interface gebruiken om naar methoden te verwijzen. In het volgende voorbeeld gebruiken we de BiFunction-interface en de bijbehorende methode 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); } } 
Test het nu

Uitgang:

 30 

Voorbeeld 4

U kunt statische methoden ook overschrijven door methoden te verwijzen. In het volgende voorbeeld hebben we drie optelmethoden gedefinieerd en overbelast.

 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); } } 
Test het nu

Uitgang:

 30 30.0 30.0 

2) Verwijzing naar een instancemethode

Net als statische methoden kunt u ook naar instantiemethoden verwijzen. In het volgende voorbeeld beschrijven we het proces van het verwijzen naar de instantiemethode.

Syntaxis

 containingObject::instanceMethodName 

voorbeeld 1

In het volgende voorbeeld verwijzen we naar niet-statische methoden. U kunt naar methoden verwijzen per klasseobject en anoniem object.

 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(); } } 
Test het nu

Uitgang:

 Hello, this is non-static method. Hello, this is non-static method. 

Voorbeeld 2

In het volgende voorbeeld verwijzen we naar de instancemethode (niet-statisch). Uitvoerbare interface bevat slechts één abstracte methode. We kunnen het dus gebruiken als functionele interface.

 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(); } } 
Test het nu

Uitgang:

 Hello, this is instance method 

Voorbeeld 3

In het volgende voorbeeld gebruiken we de BiFunction-interface. Het is een vooraf gedefinieerde interface en bevat een functionele methode apply(). Hier verwijzen we naar methode toevoegen om methode toe te passen.

 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); } } 
Test het nu

Uitgang:

 30 

3) Verwijzing naar een constructor

U kunt een constructor doorverwijzen met behulp van het nieuwe trefwoord. Hier verwijzen we naar constructor met behulp van een functionele interface.

Syntaxis

 ClassName::new 

Voorbeeld

 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'); } } 
Test het nu

Uitgang:

 Hello