Javaで空のマップを作成する最良の方法 質問する

Javaで空のマップを作成する最良の方法 質問する

空のマップを作成する必要があります。

if (fileParameters == null)
    fileParameters = (HashMap<String, String>) Collections.EMPTY_MAP;

問題は、上記のコードが次の警告を生成することです。型の安全性: Map から HashMap へのチェックなしのキャスト

この空のマップを作成する最良の方法は何ですか?

ベストアンサー1

1)マップが不変である場合:

Collections.emptyMap()

// or, in some cases:
Collections.<String, String>emptyMap()

コンパイラがどのような種類のマップが必要かを自動的に判断できない場合は、後者を使用する必要がある場合があります(これは型推論たとえば、次のように宣言されたメソッドを考えます。

public void foobar(Map<String, String> map){ ... }

空の Map を直接渡す場合は、型を明示的に指定する必要があります。

foobar(Collections.emptyMap());                 // doesn't compile
foobar(Collections.<String, String>emptyMap()); // works fine

2)マップを変更できるようにする必要がある場合は、たとえば次のようになります。

new HashMap<String, String>()

(としてtehblanxが指摘した


補遺: プロジェクトでグアバ、次の選択肢があります。

1)不変マップ:

ImmutableMap.of()
// or:
ImmutableMap.<String, String>of()

確かに、 と比較してここでは大きな利点はありませんCollections.emptyMap()Javadocより:

このマップは と同等の動作とパフォーマンスを発揮しCollections.emptyMap()、主にコードの一貫性と保守性の点で適しています。

2)変更できるマップ:

Maps.newHashMap()
// or:
Maps.<String, String>newHashMap()

Maps他の種類のマップをインスタンス化するための同様のファクトリーメソッドも含まれています。TreeMapまたはLinkedHashMap


アップデート(2018): の上Java9 について以降では、不変の空のマップを作成するための最短のコードは次のとおりです。

Map.of()

...新しい便利なファクトリーメソッドからJEP 269. ��

おすすめ記事