logo

Referințe pentru metoda Java

Java oferă o nouă caracteristică numită referință la metodă în Java 8. Referința la metodă este folosită pentru a face referire la metoda de interfață funcțională. Este o formă compactă și ușoară de exprimare lambda. De fiecare dată când utilizați expresia lambda doar pentru a trimite o metodă, puteți înlocui expresia lambda cu referința la metodă. În acest tutorial, explicăm în detaliu conceptul de referință al metodei.


Tipuri de referințe de metodă

Există următoarele tipuri de referințe de metodă în java:

algoritm subțire
  1. Referire la o metodă statică.
  2. Referire la o metodă de instanță.
  3. Referire la un constructor.
Tipuri de referințe pentru metode Java

1) Referire la o metodă statică

Vă puteți referi la metoda statică definită în clasă. Mai jos este sintaxa și exemplul care descriu procesul de referire a metodei statice în Java.

Sintaxă

 ContainingClass::staticMethodName 

Exemplul 1

În exemplul următor, am definit o interfață funcțională și am referit o metodă statică la metoda sa funcțională 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(); } } 
Testează-l acum

Ieșire:

 Hello, this is static method. 

Exemplul 2

În exemplul următor, folosim interfața funcțională predefinită Runnable pentru a face referire la metoda statică.

 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(); } } 
Testează-l acum

Ieșire:

 Thread is running... 

Exemplul 3

De asemenea, puteți utiliza interfața funcțională predefinită pentru a face referire la metode. În exemplul următor, folosim interfața BiFunction și folosim metoda ei 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); } } 
Testează-l acum

Ieșire:

 30 

Exemplul 4

De asemenea, puteți suprascrie metodele statice prin metode de referință. În exemplul următor, am definit și supraîncărcat trei metode de adăugare.

sql selectează mai multe tabele
 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); } } 
Testează-l acum

Ieșire:

 30 30.0 30.0 

2) Referire la o metodă de instanță

ca și metodele statice, puteți consulta și metode de instanță. În exemplul următor, descriem procesul de trimitere a metodei instanței.

Sintaxă

 containingObject::instanceMethodName 

Exemplul 1

În exemplul următor, ne referim la metode non-statice. Puteți referi metode prin obiect de clasă și obiect anonim.

 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(); } } 
Testează-l acum

Ieșire:

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

Exemplul 2

În exemplul următor, ne referim la metoda instanței (non-statică). Interfața rulabilă conține o singură metodă abstractă. Deci, îl putem folosi ca interfață funcțională.

 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(); } } 
Testează-l acum

Ieșire:

 Hello, this is instance method 

Exemplul 3

În exemplul următor, folosim interfața BiFunction. Este o interfață predefinită și conține o metodă funcțională apply(). Aici, ne referim la metoda de adăugare la metoda de aplicare.

 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); } } 
Testează-l acum

Ieșire:

emoji-uri iPhone pe telefonul Android
 30 

3) Referire la un Constructor

Puteți trimite un constructor utilizând cuvântul cheie nou. Aici, ne referim la constructor cu ajutorul interfeței funcționale.

Sintaxă

 ClassName::new 

Exemplu

 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'); } } 
Testează-l acum

Ieșire:

 Hello