6 Stimmen

Java 8 - Sind Schnittstellen nicht mehr abstrakt?

Bisher konnten in Java Schnittstellen keine Methoden implementieren. Nach Definition waren sie nur eine Sammlung von Methodensignaturen ohne Körper.

Aber anscheinend hat sich dies mit Java 8 geändert.

Stimmt das? Was sind 'default methods' genau? Was ist eine 'funktionale Schnittstelle'? Kann mir jemand das erklären? Die Dinge bei Google sind ziemlich verwirrend.

4voto

Brian Punkte 6730

In Java 8 können Interfaces jetzt default Methoden haben, die tatsächlich implementiert sind. Dies wurde gemacht, um Probleme für Benutzer zu vermeiden, die ein Interface implementieren, das geändert wurde, so dass sie nicht alle ihre Klassen aktualisieren müssen.

Sie fügen diese Funktionalität hinzu, indem Sie das default Schlüsselwort zu Ihrer Methodensignatur hinzufügen.

Siehe Die Java-Tutorials

3voto

Sergey Kalinichenko Punkte 694383

Was sind 'Default-Methoden' genau?

Default-Methoden bieten Ihnen einen Mechanismus, um einer Schnittstelle eine Implementierung hinzuzufügen, ohne sie zu einer abstrakten Klasse zu machen.

Der Hauptanwendungsfall für Standardmethoden war die Aufgabe, Methoden zu einer Schnittstelle hinzuzufügen, ohne den Code anderer Personen zu unterbrechen. Sie ermöglichen es jedoch auch, Funktionalität über die Implementierung einer Schnittstelle "einzumischen", was eine sehr leistungsfähige Ergänzung zum Typensystem von Java ist, das früher nur eine einzige Zeile von Implementierungen zuließ.

Was ist eine 'funktionale Schnittstelle'?

Eine funktionale Schnittstelle ist dagegen eine Möglichkeit, dem Compiler mitzuteilen, dass Ihre Schnittstelle genau eine Methode haben wird. Im Gegenzug dafür gibt Ihnen der Compiler eine viel kürzere Syntax für das Definieren von Implementierungen Ihrer Schnittstelle, wodurch der Code dramatisch verkürzt wird, der früher von anonymen Klassen abhängig war.

Zusätzlich zu den beiden oben genannten Funktionen können Sie über Schnittstellen auch statische Funktionen definieren, die von allen Implementierungen gemeinsam genutzt werden können. Wie bei Standardimplementierungen fügt dies eine "zweite Dimension" zur Vererbung von Implementierungen hinzu, da es Ihnen ermöglicht, Code durch die Implementierung einer Schnittstelle zu teilen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X