logo

Java metodo nuorodos

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
  1. Nuoroda į statinį metodą.
  2. Nuoroda į egzemplioriaus metodą.
  3. Nuoroda į konstruktorių.
Java metodų nuorodų tipai

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