Java suteikia naują funkciją, vadinamą metodo nuoroda Java 8. Metodo nuoroda naudojama funkcinės sąsajos metodui nurodyti. Tai kompaktiška ir lengva lambda išraiškos forma. Kiekvieną kartą, kai naudojate lambda išraišką tik metodui nurodyti, galite pakeisti lambda išraišką metodo nuoroda. Šiame vadove mes išsamiai paaiškiname metodo nuorodos koncepciją.
Metodų nuorodų tipai
Java yra šių metodų nuorodų tipai:
a b c skaičiai
- Nuoroda į statinį metodą.
- Nuoroda į egzemplioriaus metodą.
- Nuoroda į konstruktorių.
1) Nuoroda į statinį metodą
Galite kreiptis į klasėje apibrėžtą statinį metodą. Toliau pateikiama sintaksė ir pavyzdys, apibūdinantis statinio metodo nukreipimo į „Java“ procesą.
Sintaksė
ContainingClass::staticMethodName
1 pavyzdys
Šiame pavyzdyje apibrėžėme funkcinę sąsają ir statinį metodą nukreipėme į jo funkcinį metodą 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(); } }Išbandykite dabar
Išvestis:
Hello, this is static method.
2 pavyzdys
Šiame pavyzdyje mes naudojame iš anksto nustatytą funkcinę sąsają, kurią galima paleisti, kad būtų nurodytas statinis metodas.
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(); } }Išbandykite dabar
Išvestis:
Thread is running...
3 pavyzdys
Taip pat galite naudoti iš anksto nustatytą funkcinę sąsają metodams nurodyti. Šiame pavyzdyje mes naudojame BiFunction sąsają ir jos taikomą () metodą.
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); } }Išbandykite dabar
Išvestis:
30
4 pavyzdys
Taip pat galite nepaisyti statinių metodų nurodydami metodus. Šiame pavyzdyje apibrėžėme ir perkrovėme tris pridėjimo metodus.
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); } }Išbandykite dabar
Išvestis:
30 30.0 30.0
2) Nuoroda į egzempliorių metodą
kaip ir statiniai metodai, taip pat galite nurodyti egzempliorių metodus. Šiame pavyzdyje aprašome egzemplioriaus metodo nukreipimo procesą.
Sintaksė
containingObject::instanceMethodName
1 pavyzdys
Šiame pavyzdyje mes nurodome nestatinius metodus. Galite nurodyti metodus pagal klasės objektą ir anoniminį 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(); } }Išbandykite dabar
Išvestis:
Hello, this is non-static method. Hello, this is non-static method.
2 pavyzdys
Šiame pavyzdyje mes nurodome egzempliorių (nestatinį) metodą. Vykdomoje sąsajoje yra tik vienas abstraktus metodas. Taigi, mes galime naudoti jį kaip funkcinę sąsają.
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(); } }Išbandykite dabar
Išvestis:
Hello, this is instance method
3 pavyzdys
Šiame pavyzdyje mes naudojame BiFunction sąsają. Tai iš anksto nustatyta sąsaja, kurioje yra funkcinis metodas apply (). Čia mes nurodome metodo pridėjimo metodą.
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); } }Išbandykite dabar
Išvestis:
30
3) Nuoroda į konstruktorių
Galite nurodyti konstruktorių naudodami naują raktinį žodį. Čia mes nurodome konstruktorių funkcinės sąsajos pagalba.
Sintaksė
ClassName::new
Pavyzdys
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'); } }Išbandykite dabar
Išvestis:
Hello