fbpx

Interfaces Funcionales en JAVA 8

Una interfaz funcional o functional interface es una interfaz que contiene solo un método abstracto. Solo pueden tener una funcionalidad para exhibir. Desde Java 8 en adelante, las expresiones lambda se pueden usar para representar la instancia de una interfaz funcional. Una interfaz funcional puede tener cualquier número de métodos predeterminados.

Anotación @FunctionalInterface

Se recomienda que todas las interfaces funcionales tengan una anotación informativa @FunctionalInterface. Esto comunica claramente el propósito de la interfaz y también permite que un compilador genere un error si la interfaz anotada no cumple las condiciones.

Cualquier interfaz con un SAM (Single Abstract Method) es una interfaz funcional y su implementación puede tratarse como expresiones lambda.

@FunctionalInterface
interface Ejecutor {
    void ejecutar();
}

Static y Default

Cómo ya hemos descrito anteriormente, las interfaces funcionales solo pueden tener un método abstractor, sin embargo, pueden incluir métodos estáticos (static) o por defecto (default).

Static

Los métodos estáticos (static) son métodos que contienen implementación pero que dependen de la interfaz y no del objeto creado, por ello es aceptado en las interfaces funcionales (functional interfaces)

@FunctionalInterface
interface Ejecutor {
    void ejecutar();
    static void metodoEstatico(){}
}

Default

Los métodos por defecto (default) son métodos que contienen implementación pero que puede ser sobreescritos, por ello es aceptado en las interfaces funcionales (functional interfaces).

@FunctionalInterface
interface Ejecutor {
    void ejecutar();
    default void metodoPorDefecto(){}
}