logo

Reference Java metode

Java pruža novu značajku koja se zove referenca metode u Javi 8. Referenca metode koristi se za upućivanje na metodu funkcionalnog sučelja. To je kompaktan i jednostavan oblik lambda izraza. Svaki put kada koristite lambda izraz samo za referiranje metode, možete zamijeniti svoj lambda izraz referencom metode. U ovom vodiču detaljno objašnjavamo koncept reference metode.


Vrste referenci metoda

U Javi postoje sljedeće vrste referenci metoda:

  1. Upućivanje na statičku metodu.
  2. Referenca na metodu instance.
  3. Referenca na konstruktor.
Vrste referenci Java metoda

1) Upućivanje na statičku metodu

Možete se pozvati na statičku metodu definiranu u klasi. Slijedi sintaksa i primjer koji opisuju proces upućivanja statičke metode u Javi.

Sintaksa

 ContainingClass::staticMethodName 

Primjer 1

U sljedećem primjeru definirali smo funkcionalno sučelje i uputili statičku metodu na njezinu funkcionalnu metodu 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(); } } 
Testirajte sada

Izlaz:

 Hello, this is static method. 

Primjer 2

U sljedećem primjeru koristimo unaprijed definirano funkcionalno sučelje Runnable za upućivanje na statičku metodu.

 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(); } } 
Testirajte sada

Izlaz:

 Thread is running... 

Primjer 3

Također možete koristiti unaprijed definirano funkcionalno sučelje za upućivanje metoda. U sljedećem primjeru koristimo sučelje BiFunction i njegovu metodu 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); } } 
Testirajte sada

Izlaz:

dobiti vezu
 30 

Primjer 4

Također možete nadjačati statičke metode upućivanjem metoda. U sljedećem primjeru definirali smo i preopteretili tri metode dodavanja.

 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); } } 
Testirajte sada

Izlaz:

 30 30.0 30.0 

2) Referenca na metodu instance

poput statičkih metoda, možete također uputiti metode instance. U sljedećem primjeru opisujemo proces upućivanja metode instance.

Sintaksa

 containingObject::instanceMethodName 

Primjer 1

U sljedećem primjeru mislimo na nestatičke metode. Metode možete uputiti prema objektu klase i anonimnom 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(); } } 
Testirajte sada

Izlaz:

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

Primjer 2

U sljedećem primjeru referiramo na (nestatičku) metodu instance. Runnable sučelje sadrži samo jednu apstraktnu metodu. Dakle, možemo ga koristiti kao funkcionalno sučelje.

 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(); } } 
Testirajte sada

Izlaz:

 Hello, this is instance method 

Primjer 3

U sljedećem primjeru koristimo sučelje BiFunction. To je unaprijed definirano sučelje i sadrži funkcionalnu metodu apply(). Ovdje mislimo na dodavanje metode za primjenu 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); } } 
Testirajte sada

Izlaz:

java stacks
 30 

3) Referenca na konstruktora

Možete uputiti konstruktor koristeći novu ključnu riječ. Ovdje je riječ o konstruktoru uz pomoć funkcionalnog sučelja.

Sintaksa

 ClassName::new 

Primjer

 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'); } } 
Testirajte sada

Izlaz:

 Hello