2017-01-01 13 views
2

私はパラメータとしてMap<ProcessInfoEnum, String>をとるコンストラクタを持っています。だから私はNO_OPERATIONのような空の不変のマップを以下に示すように初期化しています。Guavaを使用して空のImmutableEnumMapを初期化するにはどうすればよいですか?

public Processor(EnumMap<ProcessInfoEnum, String> values) { 
    this.values = values; 
    } 

今では初期化することができるように、私はNO_OPERATION用けどImmutableEnumMapと同じ同等の行を書くことができる方法:今、私は何らかの設計変更に、以下に示すようEnumMapを使用するために私のコンストラクタを変更した

public static final Processor NO_OPERATION = new Processor(ImmutableMap.<ProcessInfoEnum, String>of()); 
    private final Map<ProcessInfoEnum, String> values; 

    public Processor(Map<ProcessInfoEnum, String> values) { 
    this.values = values; 
    } 

空の不変のenumマップ? ImmutableEnumMap以来

// obviously this doesn't work 
    public static final Processor NO_OPERATION = new Processor(ImmutableEnumMap.<ProcessInfoEnum, String>of()); 
    private final EnumMap<ProcessInfoEnum, String> values; 

    public Processor(EnumMap<ProcessInfoEnum, String> values) { 
    this.values = values; 
    } 

私はImmutableEnumMap.of()を行うことはできませんので、パッケージプライベートクラスです。他の方法はありますか?

+0

次の点を考慮してください:http://stackoverflow.com/questions/11244402/is-there-a-corresponding-immutable-enummap-in-guava –

+0

おそらくMaps.immutableEnumMap(ImmutableMap.of()); –

+0

私はそれを試みましたが、それは動作しませんし、 'ImmutableMap'にコンストラクタ定義を変更するように私に依頼しました –

答えて

3

公開されているImmutableEnumMap型はありませんので、とにかくそれをImmutableMapとして入力する必要があります。そのため、enum部分を気にせずにImmutableMap.of()を使用できます。違いはありません。

+0

私の場合、私のコンストラクタはEnumMapを入力パラメータとして受け取り、 'NO_OPERATION'を' public static final Processor NO_OPERATION = new Processor(ImmutableMap.of()); 'として宣言すると、コンストラクタの変更を求めるコンパイルエラーが発生します'EnumMap'を使用する代わりに' ImmutableMap'に変換します。 –

+1

コンストラクタがEnumMapを受け取る場合、EnumMapを作成する必要があります。 ImmutableMapはImmutableMapを拡張します。 EnumMapは拡張されません。変更可能なEnumMapを作成する必要があります。他に選択肢はありません。すべてのEnumMapsは定義上変更可能です。 (最初にコンストラクタでEnumMapを受け入れるという決定を考え直すことをお勧めします) –

+0

@LouisWasserman "EnumMapsはすべて定義可能です" - 理論的には、EnumMapを拡張して自分自身を作成することはできません例外をスローするために 'put'、' putAll'、そして 'remove'をオーバーライドすることによって' ImmutableEnumMap'クラスですか?または、これはうまくいかない微妙な理由がありますか? (私は解決策としてこれを示唆しているわけではありません) – ajb

関連する問題