私はこのようにマップをキャストしようとしています:
Map<Integer, Map<String, String>> map =
(HashMap<Integer, Map<String, String>>) pMap;
pMap は次のように入力されます。
Map<Object, Map<Object, Object>> pMap
残念ながら機能しません。その理由と、問題を回避できるかどうかを知りたいです。
これは、Integer
は のサブタイプですが、 のサブタイプでObject
はMap<Integer, Integer>
ないためですMap<Object, Object>
。
そのようにキャストすることはできません。
これについては、Java チュートリアルで詳しく説明されています。
私はジェネリック クラスにあまり詳しくありませんが、 Map< を試してもらえますか? 、Map> Integer を ? に置き換えた後の map 整数を簡単にケースに入れることができます。上で書いたように、このキーも文字列にすることができるので、うまくいくことを願っています。
したがって、この問題を回避するために私がしたことは次のとおりです。
次のようにマップを入力しました:
Map<? super Object, ? super Object>
このマップの中に好きなものを入れることができます。かもね :
Map<String, String>
また :
Map<Integer, Map<String, String>>
など。これは、私が見つけたより柔軟な方法です。唯一の制約は、マップを操作するときにマップをキャストすることです (Iterator
または を介してkeySet
)。
それが誰かを助けることを願っています。