Advanced   Java   Services Defaultmethoden in den Interfaces Iterable und Collection Back Next Up Home


Defaultmethoden in den Interfaces Iterable und Collection

Ein Interface kann ab Java 1.8 sowohl nichtstatische als auch statische reale Methoden enthalten. Um die nichtstatischen von den abstrakten Methoden zu unterscheiden, wird das Schlüsselwort default vor dem Returntyp ergänzt. Auf diese Weise kann man bestehende Interfaces problemlos um solche Methoden erweitern, da es bei diesen Methoden nichts (mehr) zu implementieren gibt


Das Interface Iterable ab Java 1.8

Hier als erstes Beispiel das Interface Iterable in 1.8 mit zwei neuen Defaultmethoden.

iterable.jpg

Wie man sieht bekommt die forEach-Methode ein Objekt vom Typ Consumer. Consumer ist ein Interfacetyp, genauer ein Functional Interface. Diese neuen Interfacetypen werden zusammen mit dem Lambdaausdrücken im übernächsten Kapitel besprochen.


Das Interface Collection in Java 1.8

Defaultmethoden können auch vererbt bzw. überschrieben werden. Das Interface Collection übernimmt (erbt) die forEach-Methode unverändert von Iterable und überschreibt die Methode spliterator(). Außerdem werden noch die Defaultmethoden parallelStream() und stream() eingeführt. Diese stream-Methoden arbeiten hervorragend mit dem neuen Lambdakonzept zusammen und sind daher sehr wichtig.

collection.jpg


Custom-Interfaces mit default- und statischen Methoden

Natürlich kann man die neuen Features auch in eigene Interfaces einbauen. Hier ein einfaches Beispiel.

/**
 * Bricht den Kontrakt nicht, weil es nichts zu implementieren gibt.
 * Angenommen, das Interface existierte schon vor 1.8, dann kann dieses Interface
 * um default- und statische Methoden erweitert werden.
 */
interface DefaultMethod
{
   // abstract method
   void foo();

   //default method
   default void defaultMethod()
   {
      System.out.println("defaultMethod");
   }

   static void staticMethod()
   {
      System.out.println("staticMethod");
   }
}

Valid XHTML 1.0 Strict top Back Next Up Home