środa, 3 sierpnia 2016

Java 8 - domyślne metody w interfejsie

Od javy 8 została wprowadzona interesująca zmiana. Dotychczas interfejs definiował tylko sygnatury metod (czyli zwracany typ, nazwę metody i typy argumentów bez implementacji tej metody). Przykładowo:

public interface Foo {
   void doSomething();
}

Deklarując, że klasa implementuje interfejs, wymuszało się implementację tych metod w owej klasie.

Od javy 8, wprowadzono możliwość zdefiniowania domyślnej implementacji metody:

public interface Foo {
     default void doSomething() {
        //Method body
    }
}

Interfejs nie musi już zawierać tylko deklaracji metod, może zawierać domyślną implementację!

Co to daje w praktyce?
Plusy:
Możesz napisać domyślną metodę, co może oszczędzić powielenia kodu w klasach implementujących interfejs. Klasa implementująca interfejs nie musi implementować metod, które mają domyślną implementację, ale w przypadkach gdy to potrzebne, można je nadpisać w danej klasie.