¿Qué es un Java reference method?. Todos hemos trabajado estos años en la plataforma Java y conocemos que existen tipos básicos y objetos. Cuando hago uso de una variable como por ejemplo
Coche c;
Estoy haciendo una referencia a un objeto. De hecho en el mundo Java a un método solo se le pueden pasar dos cosas una referencia a un objeto o un tipo básico es así de sencillo.
Sin embargo a partir de Java 8 las cosas cambian y podemos pasar también un método lo cual en muchas ocasiones es realmente práctico.
Vamos a ver un ejemplo clásico de Java 7 a través del API de IO.
package com.arquitecturajava; import java.io.File; import java.io.FileFilter; public class Principal { public static void main(String[] args) { File[] ficheros=new File(".").listFiles(new FileFilter() { public boolean accept(File fichero) { return fichero.isDirectory(); } }); for(File fichero :ficheros) { System.out.println(fichero.getName()); } } }
Se trata de un sencillo programa que usa una clase anónima para implementar el interface FileFilter de esta forma solo me saldrán por pantalla un listado de los ficheros que son directorio.
El código es cuando menos engorroso realmente lo único que quiero hacer es que el método listFiles se ejecute sobre el método isDirectory de la clase File el cual devuelve verdadero o falso que es lo que necesitamos. Así pues podemos hacer los nuevos métodos de Java 8 que se denominan reference method y que nos permiten pasar como parámetro un método propiamente dicho.
package com.arquitecturajava; import java.io.File; import java.io.FileFilter; public class Principal2 { public static void main(String[] args) { File[] ficheros=new File(".").listFiles(File::isDirectory); for(File fichero :ficheros) { System.out.println(fichero.getName()); } } }
Como podemos ver ahora usamos la sintaxis de File::IsDirectory para pasar un método como parámetro. Todo es como podemos ver infinitamente más sencillo.
Otros artículos relacionados: Introducción a Java Lambda , Java Lambda forEach ,Java 8 Date Time
Me gustaría que hables de los métodos nativos en java
me apunto la idea 🙂