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

Kod źródłowy do wglądu na GitHub!

Jeśli chcesz uzyskać dostęp do GitHuba na 30 dni i pobrać kod źródłowy wyślij smsa o treśći DOSTEP.EDUSESSION na numer 7943. Tyle wiedzy a koszt to tylko 9 PLN (11.07 PLN z VAT).




 


Leave a comment

Your email address will not be published.


*