Руководство по Guava ClassToInstanceMap
1. обзор
AClassToInstanceMap<B> - это особый вид карты, которая связывает классы с соответствующими экземплярами. Он гарантирует, что все ключи и значения являются подтипами типа верхней границыB.
ClassToInstanceMap расширяет интерфейс JavaMap и предоставляет два дополнительных метода:T getInstance(Class<T>) иT putInstance(Class<T>, T).. Преимущество этой карты состоит в том, что эти два метода могут использоваться для выполнения типобезопасных операций и Избегайте кастинга.
В этом руководстве мы покажем, как использовать интерфейсClassToInstanceMap в Google Guava и его реализации.
2. ClassToInstanceMap в Google Guava
Давайте посмотрим, как использовать реализацию.
Начнем с добавления зависимости библиотеки Google Guava вpom.xml:
com.google.guava
guava
21.0
Последнюю версию зависимости можно проверитьhere.
ИнтерфейсClassToInstanceMap имеет две реализации: изменяемую и неизменяемую. Рассмотрим каждую из них отдельно.
3. СозданиеImmutableClassToInstanceMap
Мы можем создать экземплярImmutableClassToInstanceMap несколькими способами:
-
используя методof() для создания пустой карты:
ImmutableClassToInstanceMap.of()
-
используя методof(Class<T> type, T value) для создания карты единственной записи:
ImmutableClassToInstanceMap.of(Save.class, new Save());
-
используя методcopyOf(), который принимает другую карту в качестве параметра. Он создаст карту с теми же записями, что и у карты, предоставленной в качестве параметра:
ImmutableClassToInstanceMap.copyOf(someMap)
-
используя строитель:
ImmutableClassToInstanceMap.
builder() .put(Save.class, new Save()) .put(Open.class, new Open()) .put(Delete.class, new Delete()) .build();
4. СозданиеMutableClassToInstanceMap
Мы также можем создать экземплярMutableClassToInstanceMap:
-
используя методcreate(), который создает экземпляр, поддерживаемыйHashMap:
MutableClassToInstanceMap.create();
-
используяcreate(Map<Class<? extends B>, B> backingMap), который создает экземпляр, поддерживаемый предоставленной пустой картой:
MutableClassToInstanceMap.create(new HashMap());
5. использование
Давайте посмотрим, как использовать два новых метода, добавленных в обычный интерфейсMap:
-
первый метод<T extends B> T getInstance(Class<T> type):
Action openAction = map.get(Open.class); Delete deleteAction = map.getInstance(Delete.class);
-
второй метод<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. Заключение
В этом кратком руководстве мы показали примеры использованияClassToInstanceMap из библиотеки Guava.
Реализация этих примеров может быть найдена в этих примерах может быть найдена вthe GitHub project.