Curso java 8
Fundamentos Interfaces Java:
A diferencia de las interfaces anteriores a java 8, en las nuevas interfaces de esta versión se puede tener diversos tipos de métodos nuevos. A saber:
- default.
- static
- private
1.Métodos Default:
En esencia son métodos opcionales que no son necesitan ser para la implementados en las clase que se adhieren al contrato de nuestra interfaz.
Como beneficio directo de esta característica nos encontramos con las manos libres en cierto modo para modificar nuestras interfaces sin temer que el código que ya ha implementado nuestra interfaz necesite modificación alguna.
Es importante destacar que esto no nos debe condicionar para programar de forma intensiva métodos de este tipo ya que se consideran métodos de carácter excepcional.
Sintaxis:
public interface nombre_interfaz{
default [tipo_retorno] nombre_metodo{
[cuerpo_metodo]
}
etc...
}
Los métodos default también conocidos como métodos predeterminados.
2.Métodos Static:
La inclusión de este tipo de método en las interfaces nos evitar crear clases artificiales como la popular clase Collections . El objetivo de esta clase no es otro que incorporar utilidades para el framework Collections que ahora podrían estar correctamente localizados.
Con esto el objetivo de este tipo de métodos queda claro. No es otro que, evitar esta tipo de clases creadas de un modo digamos extraño.
Es importante destacar que, este tipo de método no se hereda a través del mecanismo de la herencia entre interfaces.
3.Métodos private:
Este tipo de métodos solo se pueden usar en la propia interfaz( no se heredan) y su objetivo es evitar la duplicidad de código en diversos métodos.
Un detalle interesante es que pueden ser de instancia o static pero, fundamentalmente es para que lo usen los métodos default.
Ahora, muestro un pequeño ejemplo de interfaz. He incluido el método main en la interfaz para que sea código 100% funcional aprovechando la posibilidad de inclusión de métodos static.
package com.interfaces.novedades;
import java.util.Arrays;
@FunctionalInterface
public interface Cacular {
int resultado(int x,int y);
default int calcula(int[] numeros) {
return Arrays.stream(numeros).reduce(0, (x,y)->resultado(x, y));
}
static boolean greaterThan(int num,Cacular calcular,int ... numbers) {
return num>calcular.calcula(numbers);
}
public static void main(String[] args) {
//datos
int[] numeros= {1,1,1};
Cacular cacular1= (x,y)->x-y;
System.out.println(cacular1.calcula(numeros));
Cacular cacular2= (x,y)->x+y;
System.out.println(cacular2.calcula(numeros));
System.out.println(Cacular.greaterThan(2, cacular2, numeros));
}
}
NOTA: en el caso de desconocer las lambda expresion que hay en el método main ver el post relacionado haciendo click en este enlace:aprende lambda expresion
import java.util.Arrays;
@FunctionalInterface
public interface Cacular {
int resultado(int x,int y);
default int calcula(int[] numeros) {
return Arrays.stream(numeros).reduce(0, (x,y)->resultado(x, y));
}
static boolean greaterThan(int num,Cacular calcular,int ... numbers) {
return num>calcular.calcula(numbers);
}
public static void main(String[] args) {
//datos
int[] numeros= {1,1,1};
Cacular cacular1= (x,y)->x-y;
System.out.println(cacular1.calcula(numeros));
Cacular cacular2= (x,y)->x+y;
System.out.println(cacular2.calcula(numeros));
System.out.println(Cacular.greaterThan(2, cacular2, numeros));
}
}
NOTA: en el caso de desconocer las lambda expresion que hay en el método main ver el post relacionado haciendo click en este enlace:aprende lambda expresion
Comentarios
Publicar un comentario