En el tutorial anterior aprendimos las expresiones lambda en Java 8. Aquí discutiremos otra característica nueva de Java 8, referencia al método. La referencia al método es una notación abreviada de una expresión lambda para llamar a un método. Por ejemplo:
Si su expresión lambda se ve así:
str -> System.out.println(str)
entonces puedes reemplazarlo con un método de referencia como este:
System.out::println
El operador :: se usa en la referencia del método para separar la clase u objeto del nombre del método (aprenderemos esto con la ayuda de ejemplos).
Cuatro tipos de referencias de métodos
1. Método para hacer referencia a un método de instancia de objeto – object :: instanceMethod
2. Referencia de método a un método estático de una clase – Class :: staticMethod
3. Referencia de método a un método de instancia de un objeto arbitrario de un tipo particular – Class :: instanceMethod
4. Método de referencia a un constructor – Class :: new
1. Referencia de método a un método de instancia de objeto
@FunctionalInterface interface MyInterface{ void display(); } public class Example { public void myMethod(){ System.out.println("Instance Method"); } public static void main(String[] args) { Example obj = new Example(); // Method reference using the object of the class MyInterface ref = obj::myMethod; // Calling the method of functional interface ref.display(); } }
Producción:
Instance Method
2. Referencia de método a un método estático de una clase
import java.util.function.BiFunction; class Multiplication{ public static int multiply(int a, int b){ return a*b; } } public class Example { public static void main(String[] args) { BiFunction<Integer, Integer, Integer> product = Multiplication::multiply; int pr = product.apply(11, 5); System.out.println("Product of given number is: "+pr); } }
Producción:
Product of given number is: 55
3. Referencia de método a un método de instancia de un objeto arbitrario de un tipo particular
import java.util.Arrays; public class Example { public static void main(String[] args) { String[] stringArray = { "Steve", "Rick", "Aditya", "Negan", "Lucy", "Sansa", "Jon"}; /* Method reference to an instance method of an arbitrary * object of a particular type */ Arrays.sort(stringArray, String::compareToIgnoreCase); for(String str: stringArray){ System.out.println(str); } } }
Producción:
Aditya Jon Lucy Negan Rick Sansa Steve
4. Método de referencia a un fabricante
@FunctionalInterface interface MyInterface{ Hello display(String say); } class Hello{ public Hello(String say){ System.out.print(say); } } public class Example { public static void main(String[] args) { //Method reference to a constructor MyInterface ref = Hello::new; ref.display("Hello World!"); } }
Producción:
Hello World!