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.