1. ホーム
  2. java

[解決済み] java: HashMap<String, int>が動作しない。

2022-06-09 21:05:32

質問

HashMap<String, int> は動作しないようですが HashMap<String, Integer> は機能します。 何か思い当たることはありますか?

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

Javaではプリミティブ型を総称引数として使用することはできません。代わりに使ってください。

Map<String, Integer> myMap = new HashMap<String, Integer>();

オートボックス/アンボックス は、コードにほとんど差がありません。オートボックスは、書けるということです。

myMap.put("foo", 3);

の代わりに

myMap.put("foo", new Integer(3));

オートボックスは、最初のバージョンが暗黙のうちに2番目のバージョンに変換されることを意味します。オートアンボックスとは、書き込みができること。

int i = myMap.get("foo");

の代わりに

int i = myMap.get("foo").intValue();

を暗黙のうちに呼び出しています。 intValue() は、キーが見つからない場合は NullPointerException を、例えば。

int i = myMap.get("bar"); // NullPointerException

その理由は タイプ消去 . C#とは異なり、汎用型は実行時に保持されない。 これは、明示的なキャストのための「構文上の糖分」に過ぎず、この作業を省くためのものである。

Integer i = (Integer)myMap.get("foo");

例を挙げると、このコードは完全に合法です。

Map<String, Integer> myMap = new HashMap<String, Integer>();
Map<Integer, String> map2 = (Map<Integer, String>)myMap;
map2.put(3, "foo");