Java 8 Default-Methoden

Java 8 新特性Neue Funktionen in Java 8


Java 8 führte Default-Methoden für Schnittstellen ein.

Einfach ausgedrückt bedeuten Default-Methoden, dass Schnittstellen implementierte Methoden haben können und implementierende Klassen sie nicht implementieren müssen.

Wir müssen nur das Schlüsselwort default vor dem Methodennamen hinzufügen, um eine Default-Methode zu implementieren.

Warum gibt es dieses Feature?

Zunächst war die bisherige Schnittstelle ein zweischneidiges Schwert. Der Vorteil ist, dass sie auf Abstraktion statt auf konkrete Programmierung ausgerichtet ist. Der Nachteil ist, dass, wenn die Schnittstelle geändert werden muss, alle Klassen, die diese Schnittstelle implementieren, geändert werden müssen. Das aktuelle Collection-Framework vor Java 8 hatte keine foreach-Methode. Die übliche Lösung, die man sich vorstellen kann, besteht darin, neue Methoden und Implementierungen zu den relevanten Schnittstellen im JDK hinzuzufügen. Für bereits veröffentlichte Versionen gibt es jedoch keine Möglichkeit, neue Methoden zu einer Schnittstelle hinzuzufügen, ohne bestehende Implementierungen zu beeinflussen. Daher wurden Default-Methoden eingeführt. Ihr Zweck ist es, die Inkompatibilität zwischen Schnittstellenänderungen und bestehenden Implementierungen zu lösen.

Syntax

Das Syntaxformat einer Default-Methode ist wie folgt:

public interface Vehicle { default void print(){ System.out.println("Ich bin ein Auto!"); } }

Mehrere Default-Methoden

Wenn eine Schnittstelle eine Default-Methode hat, betrachten Sie die Situation, in der eine Klasse mehrere Schnittstellen implementiert und diese Schnittstellen dieselbe Default-Methode haben. Das folgende Beispiel veranschaulicht die Lösung für diese Situation:

public interface Vehicle { default void print(){ System.out.println("Ich bin ein Auto!"); } } public interface FourWheeler { default void print(){ System.out.println("Ich bin ein vierrädriges Fahrzeug!"); } }

Die erste Lösung besteht darin, eine eigene Default-Methode zu erstellen, um die Default-Methode der Schnittstelle zu überschreiben:

public class Car implements Vehicle, FourWheeler { default void print(){ System.out.println("Ich bin ein vierrädriges Auto!"); } }

Die zweite Lösung besteht darin, super zu verwenden, um die Default-Methode der angegebenen Schnittstelle aufzurufen:

public class Car implements Vehicle, FourWheeler { public void print(){ Vehicle.super.print(); } }

Statische Default-Methoden

Ein weiteres Merkmal von Java 8 ist, dass Schnittstellen statische Methoden deklarieren (und Implementierungen dafür bereitstellen) können. Zum Beispiel:

public interface Vehicle { default void print(){ System.out.println("Ich bin ein Auto!"); } //Statische Methoden static void blowHorn(){ System.out.println("Hupen Sie!!!"); } }

Beispiel für Default-Methode

Wir können die Verwendung von Default-Methoden anhand des folgenden Codes verstehen. Sie können den Code in die Datei Java8Tester.java einfügen:

Java8Tester.java-Datei

public class Java8Tester { public static void main(String args[]){ Vehicle vehicle = new Car(); vehicle.print(); } } interface Vehicle { default void print(){ System.out.println("Ich bin ein Auto!"); } static void blowHorn(){ System.out.println("Hupen Sie!!!"); } } interface FourWheeler { default void print(){ System.out.println("Ich bin ein vierrädriges Fahrzeug!"); } } class Car implements Vehicle, FourWheeler { public void print(){ Vehicle.super.print(); FourWheeler.super.print(); Vehicle.blowHorn(); System.out.println("Ich bin ein Automobil!"); } }

Wenn das obige Skript ausgeführt wird, ist das Ausgabeergebnis:

$ javac Java8Tester.java 
$ java Java8Tester
我是一辆车!
我是一辆四轮车!
按喇叭!!!
我是一辆汽车!

Java 8 新特性Neue Funktionen in Java 8

Andere Erweiterungen