Java 8 trae muchas mejoras, tal vez la más importante es que podemos utilizar clausuras o closures en ingles. Pero a la vez Java 8 trae una cantidad interesantes de métodos que utilizan esta nueva propiedad, y a la vez nos brindan mayor facilidad para resolver problemas.
La referencia del método Java 8 se usa para referirse a un método y para hacer que el programa o código sea simple o claro, puede usar la referencia al método en lugar de una expresión lambda.
En resumen esta notación abrevia la expresión lambda para llamar a cualquier método.
El operador '::' se usa como referencia de método. Veamos algunos tipos de referencias de método:
- Referencia a un método de una instancia: object :: instanceMethod
- Referencia a un método estático: Class :: staticMethod
- Referencia a un método de instancia de un objeto arbitrario de un tipo particular: Class :: instanceMethod
- Referencia a un constructor: Class :: new
En la siguiente imagen podemos ver la referencia y la expresión lambda que reemplaza:
Referencia a un método de una instancia:
@FunctionalInterface
interface Demo {
void show();
}
public class Test {
public void display() {
System.out.println("I am instance method");
}
public static void main(String args[]) {
Test t = new Test();
Demo d = t :: display;//performing method reference using object
d.show();//calling method of function interface
}
}
Output: I am instance method
Referencia a un método estático:
@FunctionalInterface
interface Demo1 {
void show();
}
class Test1 {
public static void display() {
System.out.println("Hi, i am static method of a class");
}
public static void main(String args[]) {
Demo1 dd = Test1 :: display;
dd.show();
}
}
Output: Hi, i am static method of a class
Referencia a un método de instancia de un objeto arbitrario de un tipo particular:
import java.util.Arrays;
class Test {
public static void main(String args[]) {
String str[] = {"pink", "orange", "black", "red"};
Arrays.sort(str, String :: compareToIgnoreCase);
for(String str1 : str) {
System.out.println(str1);
}
}
}
Output: black
orange
pink
red
Referencia a un constructor:
interface Demo4 {
FullName show(String s);
}
class FullName {
FullName(String s) {
System.out.println(s);
}
}
class Test {
public static void main(String args[]) {
Demo4 d = FullName :: new;//performing constructor reference
d.show("Anurag Singh");
}
}
Output: Anurag Singh
Dejo link: https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html