Todos conocemos la definición de interfaz, y, en este caso, esa definición no cambia, aunque si se limita:
«Una interfaz funcional es una interfaz que solo tiene un método a resolver.«
Leer más: Java8 – La interfaz funcional¿Sencillo?. Si, lo es, y además, nos ofrece un montón de posibilidades; pero ante todo, veamos de forma concreta como construirlo.
Para que Java considere que una interfaz es funcional, deberá encontrar en la misma un único método abstracto, solo eso; después podrá tener tantos métodos default como necesitemos. (Recordad que un método default en una interfaz, es aquel que NO es abstracto, ósea, tiene código)
Aparte, disponemos de una anotación que podemos utilizar. Su uso no es obligatorio, y lo único que hace es pedirle al compilador que compruebe que nuestra interfaz cumple con la normativa. Se trata de la anotación de clase:
@FunctionalInterface
Creando la interfaz
Vamos a crear una interfaz funcional pensada para recibir un objeto (de cualquier tipo) y hacer algo con él. por el nombre del método, igual es imprimirlo
Como ya dije, la linea 3 es opcional, y solo la pongo por aquello de las buenas costumbres
Para facilitar la flexibilidad, he utilizado genéricos, por lo que podre pasar a la función imprimir objetos de cualquier tipo
Hubiera podido añadir tantos métodos «default» como necesitara, pero quiero centrarme en la interfaz mínima
Utilizando una interfaz funcional
Para que veamos un ejemplo de utilización, podríamos escribir esta clase
Toda la magia, esta en la linea 7, que es donde estoy implementando la interfaz. Para lograrlo, no preciso nada mas que crear una variable del tipo de la interfaz, y, asignar a esa variable la lambda escogida para la implementación.
Destacar que mientras que en la linea 7, estoy implementando la interfaz, esta, no se EJECUTA hasta la linea 9, momento en que la llamo con el parámetro previsto
En este caso, recibe una String y la manda imprimir
Solo queda por aclarar, que en la variable «c» queda TODA la interfaz, y si esta tuviera métodos «default» los podría llamar tranquilamente desde esta variable
Comparando el uso sin lambdas
En este ejemplo concreto, la forma de solucionar el empleo de de esta interfaz, seria creando la clase que la implementa, por ejemplo
y luego, empleando esa clase, después de su instanciación, en el programa anterior
Ya no es solo el hecho de haber tenido que crear la clase, si no que el código de la clase, nos esta quedando oculto en este momento, y si necesitamos utilizar la interfaz con otros tipos, deberíamos ir creando las clases de implementación, para cada uno de ellos
Conclusión
La aportación que hace la version de Java8 a este entorno, es muy importante. especialmente para el uso de las lambdas, ya que va a ser una forma de implementar interfaces en una sola linea, sin requerir la parafernalia de crear una clase completa solo para su implementación.
Relacionado
Descubre más desde Recursos para formacion
Suscríbete y recibe las últimas entradas en tu correo electrónico.