Leitfaden für Guava ClassToInstanceMap
1. Überblick
AClassToInstanceMap<B> ist eine spezielle Art von Zuordnung, die Klassen entsprechenden Instanzen zuordnet. Es stellt sicher, dass alle Schlüssel und Werte Untertypen des TypsB. der oberen Grenze sind
ClassToInstanceMap erweitert dieMap-Schnittstelle von Java und bietet zwei zusätzliche Methoden:T getInstance(Class<T>) undT putInstance(Class<T>, T). Der Vorteil dieser Zuordnung besteht darin, dass diese beiden Methoden zur Ausführung typsicherer Operationen und verwendet werden können Casting vermeiden.
In diesem Tutorial zeigen wir Ihnen, wie Sie dieClassToInstanceMap-Schnittstelle von Google Guava und ihre Implementierungen verwenden.
2. ClassToInstanceMapvon Google Guava
Schauen wir uns an, wie die Implementierung verwendet wird.
Wir beginnen mit dem Hinzufügen der Google Guava-Bibliotheksabhängigkeit inpom.xml:
com.google.guava
guava
21.0
Die neueste Version der Abhängigkeit kann inhere überprüft werden.
Die Schnittstelle vonClassToInstanceMaphat zwei Implementierungen: eine veränderbare und eine unveränderliche. Schauen wir uns jeden einzeln an.
3. ImmutableClassToInstanceMap erstellen
Wir können eine Instanz vonImmutableClassToInstanceMap auf verschiedene Arten erstellen:
-
Verwenden der Methodeof(), um eine leere Karte zu erstellen:
ImmutableClassToInstanceMap.of()
-
Verwenden der Methodeof(Class<T> type, T value) zum Erstellen einer einzelnen Eintragskarte:
ImmutableClassToInstanceMap.of(Save.class, new Save());
-
Verwenden der MethodecopyOf(), die eine andere Zuordnung als Parameter akzeptiert. Es wird eine Karte mit den gleichen Einträgen wie die als Parameter angegebene Karte erstellt:
ImmutableClassToInstanceMap.copyOf(someMap)
-
mit dem Builder:
ImmutableClassToInstanceMap.
builder() .put(Save.class, new Save()) .put(Open.class, new Open()) .put(Delete.class, new Delete()) .build();
4. MutableClassToInstanceMap erstellen
Wir können auch eine Instanz vonMutableClassToInstanceMap erstellen:
-
Verwenden dercreate()-Methode, mit der eine vonHashMap unterstützte Instanz erstellt wird:
MutableClassToInstanceMap.create();
-
Verwenden voncreate(Map<Class<? extends B>, B> backingMap), wodurch eine Instanz von der bereitgestellten leeren Map unterstützt wird:
MutableClassToInstanceMap.create(new HashMap());
5. Verwendungszweck
Schauen wir uns an, wie die beiden neuen Methoden verwendet werden, die der regulärenMap-Schnittstelle hinzugefügt werden:
-
Die erste Methode ist<T extends B> T getInstance(Class<T> type):
Action openAction = map.get(Open.class); Delete deleteAction = map.getInstance(Delete.class);
-
Die zweite Methode ist<T extends B> T putInstance(Class<T> type, @Nullable T value):
Action newOpen = map.put(Open.class, new Open()); Delete newDelete = map.putInstance(Delete.class, new Delete());
6. Fazit
In diesem kurzen Tutorial haben wir Beispiele für die Verwendung vonClassToInstanceMap aus der Guava-Bibliothek gezeigt.
Die Implementierung dieser Beispiele finden Sie in diesen Beispielen inthe GitHub project.