Default Methoden in Java 8

Mit Default-Methoden läßt sich Logik nun direkt in Interfaces abbilden. In anderen Sprachen ist die Verwendung solcher vorgefertigter Funktionalität auch als Mixin bekannt.

Default-Methoden erlauben, das Interfaces direkt als funktionale Bausteine verwendet werden können. Klassisch wurde mit einem Interface eine Schnittstelle nur definiert, die dann eine Implementationklasse erfüllt. Default-Methoden revolutionieren die Art und Weise wie mit Interfaces und abstrakten Klassen in Java gearbeitet wird. Code kann in einer ganz neuen Art in einem Projekt verteilt werden.

So läßt sich einfach ein Interface inhaltlich erweitert. Z.B. das Collection Interface besitzt die Methode isEmpty().

public interface Collection {
  ...
  public boolean isEmpty();
  ...
}

Diese Methode könnte man in einem weiteren Interface als Default-Methode definieren, da wahrscheinlich in 99% der Fälle die Implementierung wie folgt aussieht:

public interface CollectionNew extends Collection {
  ...
  public boolean isEmpty() {
      return this.size() == 0;
  }
  ...
}


API-Evolution
Mit Default-Methoden kann eine bereits veröffentliche Schnittstelle um neue Methoden erweitert werden. Bestehende Implementationen können auch nach der Änderung der Schnittstelle compiliert werden (Quellcodekompatibel). Man ist als Entwickler nicht mehr gezwungen, eine neue Version einer Schnittstelle in einer Version X eines Interface anzubieten. So kann die Fragmentierung einer Schnittstelle verhindert werden.

Umgang mit Adaptern
Auf abstrakte Klassen kann man verzichten. Die Default-Logik ist ja schon im Interface definiert. Also, statt ein Interface, eine abstrakte Klasse und dann erst eine Klasse zu schreiben, die das Interface vollständig erfüllt, muß jetzt nur das Interface und schließlich eine Implementationsklasse geschrieben werden.

Vererbung
Default-Methoden können in Unterklassen überschrieben werden. Nicht erlaubt ist das Schlüsselwort final an einer Default-Methode, aber das versteht sich von selbst.

Fazit
Mit Default-Methoden wird dem Java-Entwickler ganz neue Möglichkeiten gegeben, Schnittstellen zu designen und Klassenhierarchien aufzubauen. Auf github findet ihr noch ausführlichere Beispiele:

GitHub-Mark-32px https://github.com/claudioaltamura/java8/tree/master/defaultmethods