logo

Java-metodereferanser

Java gir en ny funksjon kalt metodereferanse i Java 8. Metodereferanse brukes til å referere metode for funksjonelt grensesnitt. Det er kompakt og lett form for lambda uttrykk. Hver gang du bruker lambda-uttrykk til bare å henvise til en metode, kan du erstatte lambda-uttrykket med metodereferanse. I denne opplæringen forklarer vi metodereferansekonseptet i detalj.


Typer metodereferanser

Det finnes følgende typer metodereferanser i java:

  1. Referanse til en statisk metode.
  2. Referanse til en instansmetode.
  3. Referanse til en konstruktør.
Typer Java-metodereferanser

1) Referanse til en statisk metode

Du kan referere til statisk metode definert i klassen. Følgende er syntaksen og eksemplet som beskriver prosessen med å henvise til statisk metode i Java.

Syntaks

gimp erstatte farge
 ContainingClass::staticMethodName 

Eksempel 1

I det følgende eksempelet har vi definert et funksjonelt grensesnitt og henviser en statisk metode til dens funksjonelle metode 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 det nå

Produksjon:

 Hello, this is static method. 

Eksempel 2

I det følgende eksempelet bruker vi forhåndsdefinert funksjonelt grensesnitt Runnable to refer static method.

imessage-spill med Android
 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 det nå

Produksjon:

 Thread is running... 

Eksempel 3

Du kan også bruke forhåndsdefinert funksjonelt grensesnitt for å referere metoder. I det følgende eksempelet bruker vi BiFunction-grensesnittet og bruker it's application()-metoden.

 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 det nå

Produksjon:

 30 

Eksempel 4

Du kan også overstyre statiske metoder ved å henvise metoder. I det følgende eksempelet har vi definert og overbelastet tre add-metoder.

 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 det nå

Produksjon:

 30 30.0 30.0 

2) Referanse til en instansmetode

som statiske metoder, kan du også referere til instansmetoder. I det følgende eksempelet beskriver vi prosessen med å henvise til instansmetoden.

Syntaks

indeks over java
 containingObject::instanceMethodName 

Eksempel 1

I det følgende eksempelet refererer vi til ikke-statiske metoder. Du kan referere metoder etter klasseobjekt og anonymt objekt.

 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 det nå

Produksjon:

Skuespiller Rubina Dilaik
 Hello, this is non-static method. Hello, this is non-static method. 

Eksempel 2

I det følgende eksempelet refererer vi til instansmetoden (ikke-statisk). Kjørbart grensesnitt inneholder bare én abstrakt metode. Så vi kan bruke det som funksjonelt grensesnitt.

 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 det nå

Produksjon:

 Hello, this is instance method 

Eksempel 3

I det følgende eksempelet bruker vi BiFunction-grensesnittet. Det er et forhåndsdefinert grensesnitt og inneholder en funksjonell metode apply(). Her refererer vi til legge til metode for å bruke metode.

 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 det nå

Produksjon:

 30 

3) Referanse til en konstruktør

Du kan henvise en konstruktør ved å bruke det nye nøkkelordet. Her refererer vi konstruktør ved hjelp av funksjonelt grensesnitt.

Syntaks

 ClassName::new 

Eksempel

 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 det nå

Produksjon:

 Hello