1. 概要

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

ClassToInstanceMap Javaを拡張します地図インターフェイスと2つの追加メソッドを提供します。 T getInstance(Class )。 T putInstance(Class 、T)。 このマップの利点は、これら2つの方法を使用して、タイプセーフな操作を実行し、キャストを回避できることです。

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

2. GoogleGuavaのClassToInstanceMap

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

pom.xmlにGoogleGuavaライブラリの依存関係を追加することから始めます。

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

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

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

3. ImmutableClassToInstanceMapの作成

ImmutableClassToInstanceMap のインスタンスは、いくつかの方法で作成できます。

  • of()メソッドを使用して、空のマップを作成します。
    ImmutableClassToInstanceMap.of()
  • を使用して of(クラスタイプ、T値) 単一のエントリマップを作成する方法:
    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(マップ B>、B> backingMapを拡張します) これにより、提供された空のマップに裏打ちされたインスタンスが作成されます。
    MutableClassToInstanceMap.create(new HashMap());

5. 使用法

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

  • 最初の方法は T getInstance(Class タイプ)
    Action openAction = map.get(Open.class);
    Delete deleteAction = map.getInstance(Delete.class);
  • 2番目の方法は T putInstance(Class タイプ、@ Nullable T値)
    Action newOpen = map.put(Open.class, new Open());
    Delete newDelete = map.putInstance(Delete.class, new Delete());

6. 結論

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

これらの例の実装は、GitHubプロジェクトにあります。