1. ホーム
  2. java

[解決済み] Javaで空のマップを作成する最良の方法

2022-05-14 09:19:41

質問

空の地図を作りたいのですが、どうすればいいですか?

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

問題は、上記のコードでこのような警告が出ることです。 型の安全性。MapからHashMapへのキャストのチェックが外れています。

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

どのように解決するのですか?

1) Mapがimmutableになりうる場合。

Collections.emptyMap()

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

コンパイラがどのような種類のMapが必要かを自動的に判断できない場合、後者を使わなければならないことがあります(これを 型推論 ). 例えば、このように宣言されたメソッドを考えてみましょう。

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

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

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

2) Mapを修正できるようにする必要がある場合は、例えば。

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年) : オン Java 9 またはそれ以降では、不変の空マップを作成するための最短コードは

Map.of()

...新しい コンビニエンス・ファクトリ・メソッド から JEP 269 . ????