INTERFEJSY FUNKCYJNE

Interfejs funkcyjny (functional interface) to interfejs w języku Java, który zawiera dokładnie jedną metodę abstrakcyjną. Służy do implementacji programowania funkcyjnego, często w połączeniu z wyrażeniami lambda.



Cechy interfejsu funkcyjnego

Tylko jedna metoda abstrakcyjna (ale może zawierać metody domyślne i statyczne).
Można używać z wyrażeniami lambda i referencjami do metod.
Adnotacja @FunctionalInterface – opcjonalna, ale zalecana.


@FunctionalInterface
interface Greeting {
    void sayHello(String name);
}

public class Main {
    public static void main(String[] args) {
        // Implementacja interfejsu funkcyjnego za pomocą wyrażenia lambda
        Greeting greeting = name -> System.out.println("Hello, " + name + "!");
        greeting.sayHello("Adam");
    }
}

🔹 sayHello(String name) to jedyna metoda abstrakcyjna.
🔹 Implementacja za pomocą lambdy eliminuje konieczność używania implements.

Wnioski

✅ Interfejsy funkcyjne upraszczają kod i pozwalają na czytelniejsze, bardziej zwięzłe programowanie.
✅ Dzięki nim możemy korzystać z wyrażeń lambda i strumieni w Javie.
✅ Java dostarcza gotowe interfejsy (Predicate, Function, Consumer, Supplier), które eliminują potrzebę tworzenia własnych interfejsów w wielu przypadkach.