ベストな方法を空のマップをJava
-
10-07-2019 - |
質問
いが必要となり空のマップ.
if (fileParameters == null)
fileParameters = (HashMap<String, String>) Collections.EMPTY_MAP;
問題は上記のコードを作るこ警告:タイプの安全:チェックキャストからの地図をHashMap
には、どうするのがベストなのをこの空のマップ?
解決
1) 場を地図で不変です:
Collections.emptyMap()
// or, in some cases:
Collections.<String, String>emptyMap()
ご利用には後者のようにコンパイラは自動的に何か地図が必要としないこと 型推論).例えば、宣言したメソッドのようになります:
public void foobar(Map<String, String> 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
.
Update(2018年):月 Java9 以降では、最短のコードを変更でき空のマップは:
Map.of()
を用いて---新しい コファクトリメソッド から 展後も貴社に代269. 😎
他のヒント
HashMapのインスタンスが必要な場合、最良の方法は次のとおりです。
fileParameters = new HashMap<String,String>();
Mapはインターフェイスであるため、空のインスタンスを作成する場合は、Mapをインスタンス化するクラスを選択する必要があります。 HashMapは他のHashMapと同じように優れているようです。それを使用してください。
いずれかCollections.emptyMap()
、またはケースで型推論が機能しない場合、
Collections.<String, String>emptyMap()
多くの場合、nullセーフデザインには空のマップが使用されるため、nullToEmpty
ユーティリティメソッドを利用できます。
class MapUtils {
static <K,V> Map<K,V> nullToEmpty(Map<K,V> map) {
if (map != null) {
return map;
} else {
return Collections.<K,V>emptyMap(); // or guava ImmutableMap.of()
}
}
}
同様にセットの場合:
class SetUtils {
static <T> Set<T> nullToEmpty(Set<T> set) {
if (set != null) {
return set;
} else {
return Collections.<T>emptySet();
}
}
}
およびリスト:
class ListUtils {
static <T> List<T> nullToEmpty(List<T> list) {
if (list != null) {
return list;
} else {
return Collections.<T>emptyList();
}
}
}