Functional Interfaces
Un’interfaccia funzionale, è un’interfaccia che contiene un solo metodo astratto
public interface MyFunctionalInterface {
void doSomething();
}
SAM (Single Abstract Method)
Una SAM è un tipo di interfaccia funzionale che può dichiarata attraverso una funzione lambda o un riferimento a metodo.
Come Implementare un Interfaccia funzionale
In generale, le lambda expression e i riferimenti a metodo sono i modi più concisi e leggibili per implementare le interfacce funzionali, mentre le classi anonime e le implementazioni esplicite possono essere utili in situazioni più complesse
1. Implementazione esplicita:
public class saluta implements Consumer<Persona> {
@Override
public void accept(Persona p) {
System.out.println("Ciao " + p.nome);
}
}
Saluta saluta = new Saluta();
// Salutare una persona:
saluta.accept(new Persona("Giovanni", "Verdi"))
// Salutare tutte le presone dentro una lista:
List<Persona> persone = new ArrayList<>();
persone.forEach(saluta);
2. Implementazione con lambda expression:
Consumer<Persona> saluta = p -> System.out.println("Ciao " + p.nome);
// Salutare una persona:
saluta.accept(new Persona("Giovanni", "Verdi"))
// Salutare tutte le presone dentro una lista:
List<Persona> persone = new ArrayList<>();
persone.forEach(saluta);
3. Implementazione con riferimento a metodo:
Consumer<Persona> saluta = System.out::println
// Print una persona:
saluta.accept(new Persona("Giovanni", "Verdi"));
// Print di tutte le persone dentro una lista:
List<Persona> persone = new ArrayList<>();
persone.forEach(saluta);
In questo caso si farà il print della persona infatti non è possibile modificare il metodo per far salutare il nome della persona.
4. Implementazione con classe anonima:
Consumer<Persona> saluta = new Consumer<Persona>() {
@Override
public void accept(Persona p) {
System.out.println("Ciao " + p.nome);
}
});
// Salutare una persona:
saluta.accept(new Persona("Giovanni", "Verdi"))
// Salutare tutte le presone dentro una lista:
List<Persona> persone = new ArrayList<>();
persone.forEach(saluta);