【发布时间】:2017-07-31 19:11:54
【问题描述】:
我有一个Map<K, V> 并想将其转换为Map<K, U>,其中V 扩展了U。示例:我想从Map<String, String> 转到Map<String, Object>。各种集合都存在这个问题。
This question 已经有了一个“hacky”解决方案的答案,并且解释了为什么转换泛型类型通常是一个坏主意。但是让我们从 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) 不能编译?除了 hack (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 是分开发生的。
【问题讨论】:
-
也许这个答案有帮助:stackoverflow.com/questions/4288084/…
-
我很好奇为什么你认为你需要那个演员表。这可能是 XY 问题。