Перейти к основному содержимому

Руководство по Guava ClassToInstanceMap

· 2 мин. чтения

1. Обзор

ClassToInstanceMap <B> — это карта особого типа, которая связывает классы с соответствующими экземплярами. Он гарантирует, что все ключи и значения являются подтипами верхней границы типа B.

ClassToInstanceMap расширяет интерфейс карты Java и предоставляет два дополнительных метода: T getInstance(Class<T>) и T putInstance(Class<T>, T). Преимущество этой карты в том, что эти два метода можно использовать для выполнения операций с типобезопасностью и предотвращения приведения.

В этом руководстве мы покажем, как использовать интерфейс ClassToInstanceMap Google Guava и его реализации.

2. Карта ClassToInstanceMap от Google Guava

Давайте посмотрим, как использовать реализацию.

Мы начнем с добавления зависимости библиотеки Google Guava в pom.xml :

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.0.1-jre</version>
</dependency>

Последнюю версию зависимости можно проверить здесь .

Интерфейс ClassToInstanceMap имеет две реализации: изменяемую и неизменяемую. Давайте рассмотрим каждый из них в отдельности.

3. Создание ImmutableClassToInstanceMap

Мы можем создать экземпляр ImmutableClassToInstanceMap несколькими способами:

  • используя метод of() для создания пустой карты:
ImmutableClassToInstanceMap.of()
  • используя метод of(Class<T> type, T value) для создания карты с одной записью:
ImmutableClassToInstanceMap.of(Save.class, new Save());
  • используя метод copyOf() , который принимает другую карту в качестве параметра. Он создаст карту с теми же записями, что и карта, указанная в качестве параметра:
ImmutableClassToInstanceMap.copyOf(someMap)
  • с помощью конструктора:
ImmutableClassToInstanceMap.<Action>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>) :
Action openAction = map.get(Open.class);
Delete deleteAction = map.getInstance(Delete.class);
  • второй метод: <T extends B> T putInstance (тип Class<T>, значение @Nullable T) :
Action newOpen = map.put(Open.class, new Open());
Delete newDelete = map.putInstance(Delete.class, new Delete());

6. Заключение

В этом кратком руководстве мы показали примеры использования ClassToInstanceMap из библиотеки Guava.

Реализацию этих примеров можно найти в этих примерах можно найти в проекте GitHub .