Leitfaden für Guava ClassToInstanceMap

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.