logo

Reference metod Java

Java ponuja novo funkcijo, imenovano referenca metode v Javi 8. Referenca metode se uporablja za sklicevanje na metodo funkcionalnega vmesnika. Je kompaktna in enostavna oblika lambda izraza. Vsakič, ko uporabljate lambda izraz samo za sklicevanje na metodo, lahko svoj lambda izraz zamenjate s sklicem na metodo. V tej vadnici podrobno razlagamo koncept referenčne metode.


Vrste referenc metod

V Javi obstajajo naslednje vrste referenc metod:

Kat timpf
  1. Sklicevanje na statično metodo.
  2. Sklicevanje na metodo primerka.
  3. Sklicevanje na konstruktorja.
Vrste referenc metod Java

1) Sklicevanje na statično metodo

Lahko se sklicujete na statično metodo, definirano v razredu. Sledi sintaksa in primer, ki opisujeta postopek napotitve statične metode v Javi.

Sintaksa

 ContainingClass::staticMethodName 

Primer 1

V naslednjem primeru smo definirali funkcionalni vmesnik in napotili statično metodo na njeno funkcionalno metodo 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(); } } 
Preizkusite zdaj

Izhod:

 Hello, this is static method. 

Primer 2

V naslednjem primeru uporabljamo vnaprej določen funkcijski vmesnik Runnable za sklicevanje na statično metodo.

 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(); } } 
Preizkusite zdaj

Izhod:

 Thread is running... 

Primer 3

Za referenčne metode lahko uporabite tudi vnaprej določen funkcionalni vmesnik. V naslednjem primeru uporabljamo vmesnik BiFunction in njegovo metodo 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); } } 
Preizkusite zdaj

Izhod:

 30 

Primer 4

Statične metode lahko preglasite tudi z referenčnimi metodami. V naslednjem primeru smo definirali in preobremenili tri metode dodajanja.

 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); } } 
Preizkusite zdaj

Izhod:

 30 30.0 30.0 

2) Sklicevanje na metodo primerka

tako kot statične metode, se lahko sklicujete tudi na instančne metode. V naslednjem primeru opisujemo postopek sklicevanja na metodo primerka.

Sintaksa

 containingObject::instanceMethodName 

Primer 1

V naslednjem primeru mislimo na nestatične metode. Metode lahko navajate po objektu razreda in anonimnem objektu.

 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(); } } 
Preizkusite zdaj

Izhod:

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

Primer 2

V naslednjem primeru se sklicujemo na (nestatično) metodo primerka. Runnable vmesnik vsebuje samo eno abstraktno metodo. Torej ga lahko uporabimo kot funkcionalni vmesnik.

 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(); } } 
Preizkusite zdaj

Izhod:

vrsta kopice
 Hello, this is instance method 

Primer 3

V naslednjem primeru uporabljamo vmesnik BiFunction. Je vnaprej določen vmesnik in vsebuje funkcionalno metodo apply(). Tu imamo v mislih dodajanje metode za uporabo 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); } } 
Preizkusite zdaj

Izhod:

 30 

3) Sklicevanje na konstruktorja

Konstruktorja lahko napotite z uporabo nove ključne besede. Tukaj imamo v mislih konstruktorja s pomočjo funkcijskega vmesnika.

Sintaksa

 ClassName::new 

Primer

 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'); } } 
Preizkusite zdaj

Izhod:

 Hello