Java giver en ny funktion kaldet metodereference i Java 8. Metodereference bruges til at henvise metode til funktionel grænseflade. Det er kompakt og let form for lambda udtryk. Hver gang du bruger lambda-udtryk til blot at henvise til en metode, kan du erstatte dit lambda-udtryk med metodereference. I denne tutorial forklarer vi metodereferencekonceptet i detaljer.
Typer af metodereferencer
Der er følgende typer metodereferencer i java:
- Henvisning til en statisk metode.
- Reference til en instansmetode.
- Reference til en konstruktør.
1) Reference til en statisk metode
Du kan henvise til statisk metode defineret i klassen. Følgende er syntaksen og eksemplet, der beskriver processen med at henvise til statisk metode i Java.
Syntaks
linux kommandoer hvilke
ContainingClass::staticMethodName
Eksempel 1
I det følgende eksempel har vi defineret en funktionel grænseflade og henviser en statisk metode til dens funktionelle 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 nu
Produktion:
Hello, this is static method.
Eksempel 2
I det følgende eksempel bruger vi en foruddefineret funktionel grænseflade, der kan køres til at referere statisk metode.
imessage spil 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 nu
Produktion:
Thread is running...
Eksempel 3
Du kan også bruge foruddefineret funktionel grænseflade til at referere metoder. I det følgende eksempel bruger vi BiFunction-grænsefladen og bruger 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 nu
Produktion:
30
Eksempel 4
Du kan også tilsidesætte statiske metoder ved at henvise metoder. I det følgende eksempel har vi defineret og overbelastet tre tilføjelsesmetoder.
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 nu
Produktion:
30 30.0 30.0
2) Reference til en instansmetode
ligesom statiske metoder kan du også henvise til instansmetoder. I det følgende eksempel beskriver vi processen med at henvise instansmetoden.
Syntaks
indeks over java
containingObject::instanceMethodName
Eksempel 1
I det følgende eksempel henviser vi til ikke-statiske metoder. Du kan henvise metoder efter 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 nu
Produktion:
java matematik.tilfældig
Hello, this is non-static method. Hello, this is non-static method.
Eksempel 2
I det følgende eksempel henviser vi til instansmetoden (ikke-statisk). Kørbar grænseflade indeholder kun én abstrakt metode. Så vi kan bruge det som en funktionel grænseflade.
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 nu
Produktion:
Hello, this is instance method
Eksempel 3
I det følgende eksempel bruger vi BiFunction-grænsefladen. Det er en foruddefineret grænseflade og indeholder en funktionel metode apply(). Her henviser vi til tilføjelsesmetode for at anvende 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 nu
Produktion:
30
3) Reference til en konstruktør
Du kan henvise en konstruktør ved at bruge det nye søgeord. Her henviser vi konstruktør ved hjælp af funktionel grænseflade.
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 nu
Produktion:
Hello