Guava ClassToInstanceMapガイド

Guava ClassToInstanceMapのガイド

1. 概要

ClassToInstanceMap<B>は、クラスを対応するインスタンスに関連付ける特別な種類のマップです。 すべてのキーと値が上限タイプB.のサブタイプであることを確認します

ClassToInstanceMapはJavaのMapインターフェースを拡張し、2つの追加メソッドを提供します:T getInstance(Class<T>)T putInstance(Class<T>, T).このマップの利点は、これら2つのメソッドを使用してタイプセーフ操作を実行できることです。キャストは避けてください。

このチュートリアルでは、Google GuavaのClassToInstanceMapインターフェースとその実装の使用方法を示します。

2. Google GuavaのClassToInstanceMap

実装の使用方法を見てみましょう。

まず、pom.xmlにGoogleGuavaライブラリの依存関係を追加します。


    com.google.guava
    guava
    21.0

依存関係の最新バージョンはhereで確認できます。

ClassToInstanceMapインターフェースには、可変と不変の2つの実装があります。 それぞれを個別に見てみましょう。

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のインスタンスを作成することもできます。

  • HashMapでバックアップされたインスタンスを作成するcreate()メソッドを使用する:

    MutableClassToInstanceMap.create();
  • 提供された空のマップに裏打ちされたインスタンスを作成するcreate(Map<Class<? extends B>, B> backingMap)を使用します。

    MutableClassToInstanceMap.create(new HashMap());

5. 使用法

通常のMapインターフェースに追加された2つの新しいメソッドの使用方法を見てみましょう。

  • 最初の方法は<T extends B> T getInstance(Class<T> type)です:

    Action openAction = map.get(Open.class);
    Delete deleteAction = map.getInstance(Delete.class);
  • 2番目の方法は<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. 結論

このクイックチュートリアルでは、GuavaライブラリのClassToInstanceMapを使用する方法の例を示しました。

これらの例の実装は、the GitHub projectにあります。