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

Руководство по 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.