Kurs Java

Interfejs funkcyjny - Co to jest?

W poprzednich rozdziałach regularnie używaliśmy interfejsów, które mają tylko jedną metodę abstrakcyjną. Nadszedł czas, aby to wyjaśnić. Od Javy 8 każdy interfejs, który posiada dokładnie jedną metodę abstrakcyjną, z miejsca staje się interfejsem funkcyjnym.

Tak więc takim interfejsem jest zarówno interfejs:
public interface Item {     

    String getDescription();
} 
jak i taki interfejs (pochodzący ze źródeł Javy):
public interface Comparator {
    
    int compare(T o1, T o2);
    
    boolean equals(Object obj);
    
    default Comparator reversed() {
        return Collections.reverseOrder(this);
    }
    
    ...
}
Ten drugi może budzić trochę wątpliwości, gdyż poza metodą abstrakcyjną compare, zawiera jeszcze dwie inne metody, z których co najmniej jedna wygląda również na abstrakcyjną. Mamy tu jednak do odnotowania dwa fakty:
  • Metoda reversed to metoda domyślna, a więc nie liczy się, gdyż nie jest metodą abstrakcyjną.

  • Metoda equals to owszem, metoda abstrakcyjna, ale należy do zbioru metod zdefiniowanych w klasie Object, a te metody nie są brane pod uwagę.

Krótko mówiąc, precyzyjna definicja interfejsu funkcyjnego powinna brzmieć - "Interfejs funkcyjny to interfejs posiadający dokładnie jedną metodę abstrakcyjną, z wyłączeniem metod przesłaniających metody z klasy Object".

Adnotacja @FunctionalInterface

W Javie 8 istnieje adnotacja, która pomaga weryfikować, czy dany interfejs faktycznie jest interfejsem funkcyjnym. Oznaczając interfejs adnotacją @FunctionalInterface, dajemy znać kompilatorowi, że dany interfejs ma być interfejsem funkcyjnym i wtedy kompilator sprawdza, czy istnieje w nim jedna abstrakcyjna metoda. W przypadku gdy warunki nie są spełnione, kod nie będzie się kompilował.

W Intellij dostaniemy dwa różne komunikaty w zależności od tego, czy w ogóle nie dodaliśmy metody lub czy nie dodaliśmy ich przypadkiem za dużo:
Java 8 Interfejs funkcyjny - Błąd 1
Java 8 Interfejs funkcyjny - Błąd 2
Tak będzie to wyglądało, jeśli użyjemy poprawnej konstrukcji...
Masz pytanie dotyczące tego rozdziału? Zadaj je nam!
Masz pytanie dotyczące prezentowanego materiału?
Coś jest dla Ciebie niejasne i Twoje wątpliwości przeszkadzają Ci w pełnym zrozumieniu treści?
Napisz do nas maila, a my chętnie znajdziemy odpowiednie rozwiązanie.
Najciekawsze pytania wraz z odpowiedziami będziemy publikować pod rozdziałem.
Nie czekaj. Naucz się programować jeszcze lepiej.
kursjava@javappa.com

Stale się rozwijamy, a więc bądź na bieżąco!
Na ten adres będziemy przesyłać informacje o ważniejszych aktualizacjach, a także o nowych materiałach pojawiających się na stronie.
Polub nas na Facebooku:
Nasi partnerzy: stackshare
Javappa to również profesjonalne usługi programistyczne oparte o technologie JAVA. Jeśli chesz nawiązać z nami kontakt w celu uzyskania doradztwa bądź stworzenia aplikacji webowej powinieneś poznać nasze doświadczenia.
Kliknij O nas .


Pozycjonowanie stron: Grupa TENSE