logo

Referências de métodos Java

Java fornece um novo recurso chamado referência de método em Java 8. A referência de método é usada para referir-se ao método da interface funcional. É uma forma compacta e fácil de expressão lambda. Cada vez que usar a expressão lambda apenas para se referir a um método, você pode substituir sua expressão lambda pela referência de método. Neste tutorial, explicamos detalhadamente o conceito de referência de método.


Tipos de referências de métodos

Existem os seguintes tipos de referências de método em java:

  1. Referência a um método estático.
  2. Referência a um método de instância.
  3. Referência a um construtor.
Tipos de referências de métodos Java

1) Referência a um método estático

Você pode consultar o método estático definido na classe. A seguir está a sintaxe e o exemplo que descrevem o processo de referência de métodos estáticos em Java.

Sintaxe

 ContainingClass::staticMethodName 

Exemplo 1

No exemplo a seguir, definimos uma interface funcional e referimos um método estático ao seu método 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(); } } 
Teste agora

Saída:

bash enquanto loop
 Hello, this is static method. 

Exemplo 2

No exemplo a seguir, estamos usando a interface funcional predefinida Runnable para fazer referência ao método estático.

 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(); } } 
Teste agora

Saída:

 Thread is running... 

Exemplo 3

Você também pode usar uma interface funcional predefinida para consultar métodos. No exemplo a seguir, estamos usando a interface BiFunction e seu método 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); } } 
Teste agora

Saída:

 30 

Exemplo 4

Você também pode substituir métodos estáticos referindo métodos. No exemplo a seguir, definimos e sobrecarregamos três métodos add.

 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); } } 
Teste agora

Saída:

 30 30.0 30.0 

2) Referência a um método de instância

assim como os métodos estáticos, você também pode consultar métodos de instância. No exemplo a seguir, descrevemos o processo de referência do método de instância.

Sintaxe

 containingObject::instanceMethodName 

Exemplo 1

No exemplo a seguir, estamos nos referindo a métodos não estáticos. Você pode consultar métodos por objeto de classe e objeto anônimo.

 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(); } } 
Teste agora

Saída:

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

Exemplo 2

No exemplo a seguir, estamos nos referindo ao método de instância (não estático). A interface executável contém apenas um método abstrato. Então, podemos usá-lo como interface 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(); } } 
Teste agora

Saída:

 Hello, this is instance method 

Exemplo 3

No exemplo a seguir, estamos usando a interface BiFunction. É uma interface predefinida e contém um método funcional apply(). Aqui, estamos nos referindo ao método add para aplicar o método.

adicione tudo
 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); } } 
Teste agora

Saída:

 30 

3) Referência a um Construtor

Você pode referir um construtor usando a palavra-chave new. Aqui, estamos nos referindo ao construtor com a ajuda da interface funcional.

Sintaxe

 ClassName::new 

Exemplo

 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'); } } 
Teste agora

Saída:

 Hello