Java 8 – zmiany w interfejsach

Java 8 – zmiany w interfejsach

Zmiany w interfejsach dotyczą możliwości dodawania definicji metod do interfejsów. Do wersji Java 8 możliwe było dodawanie tylko samych deklaracji czysto abstrakcyjnych metod. Wprowadzono nowe słowo kluczowe default:

public interface InterfacesDemo {
    default void printMsg(Object msg) {
        System.out.println("[log]" + " " + msg);
    }
}

Ponadto możliwe jest dodawanie do interfesjów definicji metod statycznych – takich metod nie wolno nadpisywać:

public interface InterfacesDemo {
    default void printMsg(Object msg) {
        System.out.println("[log]" + " " + msg);
    }
 
    static void getInfo() {
        System.out.println("changes in interfaces in java8");
    }
}

Dlaczego taka zmiana? Otóż jeśli duża ilość klas implementuje dany interfejs to kiedy dochodzi nowa metoda to przed wersją 8 Javy trzeba było ją zaimplementować w każdej klasie. W przypadku kiedy metoda miałaby taką samą implementację we wszystkich klasach które implementują wspomniany interfejs dochodzi do redundancji kodu  z ang. Boilerplate code. Deklarowanie metod których nie trzeba implementować w klasach pochodnych rozwiązuje ten problem. Wadą tego rozwiązania jest moim zdaniem to, że zaciera się granica pomiędzy klasą abstrakcyjną a pojęciem interfejsu. Całość przedstawia się następująco:

interface InterfacesDemo {
    default void printMsg(Object msg) {
        System.out.println("[log]" + " " + msg);
    }
 
    static void getInfo() {
        System.out.println("changes in interfaces in java8");
    }
}
 
public class InterfacesMainDemo {
 
    public static void main(String[] args) {
 
        InterfacesDemo interfacesDemo = new InterfacesDemo() {
 
        };
 
        interfacesDemo.printMsg("somethind msg");
        InterfacesDemo.getInfo();
 
    }
}

Wynik:

[log] something msg
changes in interfaces in java 8

Zobacz kod na GitHubie i zapisz się na bezpłatny newsletter!

.

 

Leave a comment

Your email address will not be published.


*