Googles Mission für ihre Erweiterungen ist die Bereitstellung von neuen Collection-Typen und -Implementierungen mit stabilen Schnittstellen, so wie das JDK. Bei der Entwicklung hat Google hauptsächlich die eigenen Bedürfnisse in den Vordergrund gestellt. Allerdings wurde stets auf die Kompatibilität mit den Schnittstellen des Java Collections Framework geachtet.
Google hat sich Zeit gelassen mit einer finalen Version, denn der Projektstart war bereits 2007, und erst vor ein paar Wochen wurde die Version 1.0 veröffentlicht [3]. Obwohl Google bis zur finalen Version keine stabilen Schnittstellen versprach, haben die Google Collections bereits in frühen Versionen in der Entwicklergemeinde großen Anklang gefunden.
Wo gibt es den Beispielcode?
Alle hier präsentierten Codebeispiele können in einem Maven-Projekt von github [4] heruntergeladen werden. Die Beispiele basieren auf Version 1.0 der Google Collections, der aktuellen Version momentan. Der Beispielcode wurde als JUnit TestCase implementiert und kann über Maven oder die IDE der Wahl ausgeführt werden.
Utility-Klassen
Die Google Collections liefern eine Fülle sehr nützlicher Hilfsklassen, die eine Unmenge an wiederkehrendem Code einsparen. Das erste Beispiel zeigt die Instantiierung einer altbekannten Map mit Generics aus dem traditionellen Java’s Collections Framework:
Map<String,Map<Long, List<String>>> map = newHashMap<String,Map<Long,List<String>>>();
Die Hilfsklassen von Google Collections, kombiniert mit statischen import-Anweisungen, machen das ganze viel einfacher und schlanker:
import static com.google.common.collect.Maps.newHashMap;Map<String,Map<Long, List<String>>> map = newHashMap();
Man beachte hier, dass es keine Kompilier-Warnungen bezüglich ungeprüfter Zuweisungen (unchecked assignments) gibt. Google hat sichergestellt, dass ihre Bibliothek ordentlich generifiziert und typsicher ist. Diese Hilfsklassen sind im Übrigen auch für java.util.List und Map verfügbar.
Ein häufiges Muster beim Schreiben von Unit-Tests ist das Instantiieren einer List und das Hinzufügen von fixtures, gegen die später, im Testablauf, das Ergebnis verifiziert wird. Ein Beispiel könnte so aussehen:
List<String> list = Arrays.asList(“a”, “b”);assertTrue(list.contains(result));
Die Google Collections verfügen über einen netten List-Type, der das Instantiieren der fixtures erleichtert. Zusätzlich ist die Liste unveränderlich, so dass zwischen der Erstellung und der Verifikation eine Manipulation der Liste nicht möglich ist:
import static com.google.common.collect.ImmutableList.of;List<String> list = of(“a”, “b”); // this is actually immutableassertTrue(list.contains(result));
ImmutableList und seine Geschwister ImmutableMap und ImmutableSet stellen nicht einfach nur eine Sicht auf eine Collection zur Verfügung, so wie das bei Collections.unmodifieableList() der Fall ist, sondern eine echte unveränderliche Collection.















