Guia do Guava ClassToInstanceMap

Guia do Guava ClassToInstanceMap

1. Visão geral

UmClassToInstanceMap<B> é um tipo especial de mapa que associa classes a instâncias correspondentes. Ele garante que todas as chaves e os valores são subtipos do tipo de limite superiorB.

ClassToInstanceMap estende a interfaceMap de Java e fornece dois métodos adicionais:T getInstance(Class<T>)eT putInstance(Class<T>, T). A vantagem deste mapa é que esses dois métodos podem ser usados ​​para executar operações seguras de tipo e evite lançar.

Neste tutorial, mostraremos como usar a interfaceClassToInstanceMap do Google Guava e suas implementações.

2. ClassToInstanceMap do Google Guava

Vamos dar uma olhada em como usar a implementação.

Começaremos adicionando a dependência da biblioteca Google Guava empom.xml:


    com.google.guava
    guava
    21.0

A versão mais recente da dependência pode ser verificadahere.

A interfaceClassToInstanceMap tem duas implementações: uma mutável e outra imutável. Vamos dar uma olhada em cada um deles separadamente.

3. Criando umImmutableClassToInstanceMap

Podemos criar uma instância deImmutableClassToInstanceMap de várias maneiras:

  • usando o métodoof() para criar um mapa vazio:

    ImmutableClassToInstanceMap.of()
  • usando o métodoof(Class<T> type, T value) para criar um único mapa de entrada:

    ImmutableClassToInstanceMap.of(Save.class, new Save());
  • usando o métodocopyOf() que aceita outro mapa como parâmetro. Ele criará um mapa com as mesmas entradas que o mapa fornecido como o parâmetro:

    ImmutableClassToInstanceMap.copyOf(someMap)
  • usando o construtor:

    ImmutableClassToInstanceMap.builder()
      .put(Save.class, new Save())
      .put(Open.class, new Open())
      .put(Delete.class, new Delete())
      .build();

4. Criando umMutableClassToInstanceMap

Também podemos criar uma instância deMutableClassToInstanceMap:

  • usando o métodocreate() que torna uma instância apoiada porHashMap:

    MutableClassToInstanceMap.create();
  • usando ocreate(Map<Class<? extends B>, B> backingMap) que torna uma instância apoiada pelo mapa vazio fornecido:

    MutableClassToInstanceMap.create(new HashMap());

5. Uso

Vamos dar uma olhada em como usar os dois novos métodos que são adicionados à interfaceMap regular:

  • o primeiro método é<T extends B> T getInstance(Class<T> type):

    Action openAction = map.get(Open.class);
    Delete deleteAction = map.getInstance(Delete.class);
  • o segundo método é<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. Conclusão

Neste tutorial rápido, mostramos exemplos de como usarClassToInstanceMap da biblioteca Guava.

A implementação desses exemplos pode ser encontrada nesses exemplos pode ser encontrada emthe GitHub project.