最近、JavaでEnumMapの利点について学び、既存のImmutableMap<OccupancyType, BigDecimal>
をEnumMapに置き換えたいと思います。ただし、ImmutableMapによって提供される不変プロパティも必要です。
グアバの寄稿者はこちら。
Guavaには現在ImmutableEnumMap
バリアントがありませんが、ある場合は、おそらくEnumMap
のラッパーになります。 (とはいえ、わずかに優れた不変の実装が可能です。)
いずれにしても、EnumMap
は基本的なImmutableMap
よりもパフォーマンスが高くなります。打ち負かすのは難しいか不可能です。
(ただし、列挙型キータイプのImmutableMap
バリアントの追加を調査するために 問題を提出 します。)
更新:Guava 14は Maps.immutableEnumMap()
を追加します。
ImmutableEnumMap
が Guava 14. にあるので、例を示したかっただけです。これはパッケージプライベートクラスであるため、ImmutableEnumMap.of()
を実行できないためです。代わりにMaps.immutableEnumMap()
を実行する必要があります。
private final ImmutableMap<MyEnum, String> myEnumMap = Maps.immutableEnumMap(ImmutableMap.of(
MyEnum.A, "A",
MyEnum.B, "B",
MyEnum.C, "C"
));
より自然な構文があるかどうかはわかりません。
Guava ImmutableEnumMapはバージョン14の時点でまだベータとしてマークされているため、列挙型マップの変更不可能なビューを使用してから、列挙型マップへの元の参照を破棄して、不変であることを確認することをお勧めします。
例(コンストラクター内):
Map entries = new EnumMap <SomeEnum, T>(SomeEnum.class);
... // (fill in entries)
this.entries = Collections.unmodifiableMap(entries);