2

回答/編集:

わかりました。EnumBiMapを誤って使用しようとしていることに気づきました。null値を許可しないbiマップが欲しかったのですが、Guavaライブラリにはありません。ImmutableBiMapを見ましたが、値が変化しない静的なものであると想定されています。HashBiMapに何かを入れる前に、nullをチェックする必要があると思います。

そうは言っても、これがEnumBiMapをインスタンス化/使用する方法です。

与えられた列挙型:

enum Test{
    VAL;
}  

使用する:

Map<Test, Test> m = EnumBiMap.create(Test.class, Test.class);
m.put(Test.VAL, Test.VAL);

または、より一般的なEnumBiMapが必要な場合は、任意の列挙型をサポートします。

Map<Enum, Enum> m = EnumBiMap.create(Enum.class, Enum.class);
m.put(Test.VAL, Test2.VAL2);

元の質問:

Guava APIのドキュメントとWebを調べましたが、EnumBiMapクラスを実装する例が見つかりません。簡単にインスタンス化できるHashBiMapと同じようには動作しません。これが私が試したことです-これらのどれも私のためにコンパイルされません:

Map<Integer, String> m = EnumBiMap.create();

..ここで提案されているものと同様:Java:GoogleコレクションのHashBiMapをインスタンス化する

また試した:

Map<Integer, String> m = EnumBiMap.<Integer, String>create();

..ここでのフォーマットと同様:Google Guava:ImmutableSortedMap.naturalOrderの使用方法は?

と:

Map<Integer, String> m = EnumBiMap.create(Integer.class, String.class);

誰かがEnumBiMapを正常に実装したか、例を見たことがありますか?もしそうなら、どのように?

4

1 に答える 1

8

意味しますか(Guavaバージョン14.0):

Map<Test, Test> m = EnumBiMap.create(Test.class, Test.class);
m.put(Test.VAL, Test.VAL);

そして、署名に注意してください:

<K extends Enum<K>, V extends Enum<V>> EnumBiMap<K, V> create(Class<K> keyType, Class<V> valueType)

したがってIntegerKまたはVStringには適していません。

于 2013-02-16T11:14:03.993 に答える