logo

Referències del mètode Java

Java proporciona una nova característica anomenada referència de mètode a Java 8. La referència de mètode s'utilitza per referir el mètode de la interfície funcional. És una forma compacta i fàcil d'expressió lambda. Cada vegada que utilitzeu una expressió lambda només per referir-vos a un mètode, podeu substituir la vostra expressió lambda per una referència de mètode. En aquest tutorial, estem explicant el concepte de referència del mètode amb detall.

cadena java

Tipus de referències de mètodes

Hi ha els següents tipus de referències de mètodes a Java:

  1. Referència a un mètode estàtic.
  2. Referència a un mètode d'instància.
  3. Referència a un constructor.
Tipus de referències de mètodes Java

1) Referència a un mètode estàtic

Podeu fer referència al mètode estàtic definit a la classe. A continuació es mostra la sintaxi i l'exemple que descriuen el procés de referència al mètode estàtic a Java.

Sintaxi

 ContainingClass::staticMethodName 

Exemple 1

En l'exemple següent, hem definit una interfície funcional i hem referit un mètode estàtic al seu mètode funcional 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(); } } 
Prova-ho ara

Sortida:

 Hello, this is static method. 

Exemple 2

En l'exemple següent, estem utilitzant una interfície funcional predefinida Runnable per fer referència al mètode estàtic.

 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(); } } 
Prova-ho ara

Sortida:

 Thread is running... 

Exemple 3

També podeu utilitzar una interfície funcional predefinida per referir mètodes. A l'exemple següent, estem utilitzant la interfície BiFunction i el mètode 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); } } 
Prova-ho ara

Sortida:

 30 

Exemple 4

També podeu substituir mètodes estàtics fent referència a mètodes. A l'exemple següent, hem definit i sobrecarregat tres mètodes d'addició.

 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); } } 
Prova-ho ara

Sortida:

 30 30.0 30.0 

2) Referència a un Mètode d'instància

com els mètodes estàtics, també podeu fer referència a mètodes d'instància. En l'exemple següent, estem descrivint el procés de referència del mètode d'instància.

Sintaxi

 containingObject::instanceMethodName 

Exemple 1

En l'exemple següent, ens referim a mètodes no estàtics. Podeu referir mètodes per objecte de classe i objecte anònim.

ordre lexicogràfic
 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(); } } 
Prova-ho ara

Sortida:

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

Exemple 2

En l'exemple següent, ens referim al mètode d'instància (no estàtic). La interfície executable només conté un mètode abstracte. Per tant, podem utilitzar-lo com a interfície funcional.

 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(); } } 
Prova-ho ara

Sortida:

 Hello, this is instance method 

Exemple 3

En l'exemple següent, estem utilitzant la interfície BiFunction. És una interfície predefinida i conté un mètode funcional apply(). Aquí, ens referim al mètode d'afegir per aplicar el mètode.

 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); } } 
Prova-ho ara

Sortida:

 30 

3) Referència a un Constructor

Podeu fer referència a un constructor utilitzant la paraula clau new. Aquí, ens referim al constructor amb l'ajuda de la interfície funcional.

Sintaxi

 ClassName::new 

Exemple

 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'); } } 
Prova-ho ara

Sortida:

 Hello