Scala Bytes: Implizite Parameter

Zugriff auf Typparameter

Mithilfe von impliziten Parametern kann man auch zur Laufzeit auf Typparameter zugreifen. Dazu gibt es die Bibliotheksklasse ClassManifest, die ausschließlich zur Verwendung als impliziter Parameter gedacht ist. So kann man zum Beispiel auf den Typparameter einer übergebenen Liste zugreifen:

def elemType [T] (l: List[T])
        (implicit manifest: ClassManifest[T]) = { 
  println ("Elementtyp: " + manifest.erasure) 
} 

Die Methode erasure liefert dabei das Class-Objekt, das zum Typparameter gehört. Wenn man das Ganze mit einer String-Liste aufruft, erzeugt der Compiler automatisch als zweiten Parameter eine ClassManifest-Instanz für den Typ String:

elemType (List ("a"))

Das Ganze funktioniert auch mit leeren Listen, was in Java völlig unmöglich wäre:

val emptyList = List[Int] ()
elemType (emptyList)

In diesem Falle gibt die aufgerufene Methode aus, dass der ElementTyp Int ist.

Fazit

Scala bietet in Form impliziter Parameterlisten eine Möglichkeit, auf Aufruferseite Default-Werte für Parameter zu definieren. Wenn man diese Möglichkeit mit Augenmaß benutzt, kann man damit die Verwendung von Bibliothekscode deutlich übersichtlicher machen, besonders wenn die gleichen Parameter in vielen Methoden auftauchen.

Arno Haase ist selbstständiger Softwarearchitekt aus Braunschweig. Neben seiner Beratungstätigkeit krempelt er gerne die Ärmel hoch und schreibt selbst Software, sowohl in Kundenprojekten als auch Open Source. Er ist eines der Gründungsmitglieder von se-radio.net, dem Software Engineering Podcast. Außerdem spricht er regelmäßig auf einschlägigen Konferenzen und ist Autor diverser Artikel und Patterns sowie Koautor von Büchern über JPA und modellgetriebene Softwareentwicklung.
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.