Tech up! zu Factory Methods for Collections

In unserer neuen Blogpost-Serie „Tech up!“ dreht sich alles um technische Themen – unsere System Technicians und Software Engineers zeigen ihre Expertise.  Jean-Claude (Senior Software Engineer) schreibt in seinem Beitrag zu Factory Methods for Collections in Java9.

In den kommenden Wochen möchten wir euch einiges mehr zu unseren “Java9 Perlen“ erzählen und starten heute mit dem JEP 269: Convenience Factory Methods for Collections.

Wenn man in Java jUnit Tests scheibt, erstellt man oftmals Listen oder Sets mit den erwarteten Werten. Danach prüft man, ob das Resultat einer zu testenden Methode mit diesen Werten übereinstimt. Dies ist in Java bisher leider etwas umständlich. Als Beispiel möchten wir eine Liste mit Städtenamen erstellen.

In Java9 gibt es in den Collection Klassen nun neue Factory Methoden, die diese Arbeit erleichtern.

Das funktioniert auch für Sets.

Zusätzlich gibt es Support für Maps in zwei verschiedenen Varianten

Variante 1

Maps mit wenigen Elementen: Dabei sind die Parameter für die Map.of() Methode abwechselnd Keys und Values. Folgend möchten wir ein Mapping von Städten und den dazugehörigen Sprachen implementieren:

Variante 2

Maps mit mehr Elementen: Dabei wird jedes Key/Value-Paar in ein Map.entry() Objekt gepackt:

Spezielles

Die mit den of() Methoden erstellen Listen, Sets und Maps haben einige spezielle Eigenschaften, die wir uns kurz anschauen möchten.

Null Values
Es ist nicht möglich Null Werte in eine Liste oder in ein Set einzufügen. Dies führt zur Laufzeit einer NullPointerException:

Immutable
Die erstellten Collections sind „immutable“. Es ist also nicht möglich, Werte hinzuzufügen oder Werte in der Collection zu ersetzen. Dies ergibt zur Laufzeit einer UnsupportedOperationException:

Duplicate Values
Bei Sets und Maps ist es nicht erlaubt, gleiche Werte/Keys mehrmals die Collection einzufügen. Denn dies führt zur Laufzeit einer IllegalArgumentException:

Schreib einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *