私はMap<K, V>
を持っていて、それはMap<K, U>
にキャストしたいところです。V
がU
になります。例:Map<String, String>
からMap<String, Object>
に行きたい。この問題は、あらゆる種類のコレクションに存在します。地図をスーパークラスジェネリックタイプのマップにキャスト
This questionには、「ハッキー」ソリューションの回答と、一般的なタイプのキャストが一般的に悪い理由が説明されています。しかし、のはVOOからの回答から例を再訪してみましょう:
List<String> m = Something;
m.add("Looks good.");
m.add("42");
List<Object> s = (List<Object>)m; // (1) does not compile
List<Object> t = (List)m; // (2) compiles with warnings
Object myObject = s.get(1);
この例についていくつかの質問:
- なぜこれが(1)コンパイルされませんか?ハック(2)以外のコンパイル方法ですか?
List<String>
をList<Object>
にキャストすると、すべての文字列がオブジェクトなので、何が問題になる可能性がありますか? 私の具体的な問題
:
私はレベルごとにマップが含まれているMap<Integer, Map<Vector2i, MyClass> > map = ...
を持っています。レベル0のマップのタイプはMap<Vector2i, MySubClass> special = ...
です。今度はspecial
がキー0のmap
の一部になりたいので、キー0のmap
へのアクセスを通常のMap<Vector2i, MyClass>
オブジェクトとして扱うことができます。
状況は読み取り専用です。つまり、map
とspecial
への書き込みは別々に行われます。
多分この回答は役に立ちます:https://stackoverflow.com/questions/4288084/how-to-convert-liststring-to-listobject –
私は興味があります*なぜあなたはそのキャストが必要だと思いますか?これはXY問題かもしれません。 – shmosel