Guava ClassToInstanceMapガイド
1概要
ClassToInstanceMap <B>
は、クラスを対応するインスタンスに関連付ける特別な種類のマップです。すべてのキーと値が上限型
B.
のサブタイプであることを確認します。
ClassToInstanceMap
はJavaの
Map
インターフェースを拡張し、2つの追加メソッドを提供します。
T getInstance(Class <T>)
と__T putInstance(Class <T>、T)。安全な操作とキャストを避けます。
このチュートリアルでは、Google Guavaの
ClassToInstanceMap
インターフェイスとその実装の使い方を説明します。
2 Google Guavaの
ClassToInstanceMap
実装の使い方を見てみましょう。
まず、
pom.xml
にGoogle Guavaライブラリの依存関係を追加します。
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>21.0</version>
</dependency>
依存関係の最新バージョンはhttps://search.maven.org/classic/#search%7C1%7Cg%3A%22com.google.guava%22%20AND%20a%3A%22guava%22[ここに]。
ClassToInstanceMap
インタフェースには、可変と不変の2つの実装があります。それぞれを個別に見てみましょう。
3
ImmutableClassToInstanceMap
を作成する
ImmutableClassToInstanceMap
のインスタンスを作成する方法はいくつかあります。
-
空のマップを作成するために
of()
メソッドを使う:
ImmutableClassToInstanceMap.of()
-
of(Class <T> type、T value)
メソッドを使って単一のエントリを作成する
地図:
ImmutableClassToInstanceMap.of(Save.class, new Save());
-
別のマップをパラメータとして受け取る
copyOf()
メソッドを使用する。それ
パラメータとして与えられたmapと同じエントリでmapを作成します。
+[source、java、gutter:、true]
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
インターフェースに追加された2つの新しいメソッドの使い方を見てみましょう。
-
最初のメソッドは
<TはB> T getInstance(Class <T>型)
を拡張します。
Action openAction = map.get(Open.class); Delete deleteAction = map.getInstance(Delete.class);
-
2番目の方法は__ <TはB> T putInstance(Class <T>型、@ NULL可能)
T値)__:
+[source、java、gutter:、true]
Action newOpen = map.put(Open.class, new Open()); Delete newDelete = map.putInstance(Delete.class, new Delete());
6. 結論
このクイックチュートリアルでは、Guavaライブラリの
ClassToInstanceMap
の使用方法の例を示しました。
これらの例の実装はhttps://github.com/eugenp/tutorials/tree/master/guava-collections[the GitHub project]にあります。