我想投一个地图是这样的:不能投<对象,地图<对象,对象>>地图为更具体的类型化地图
Map<Integer, Map<String, String>> map =
(HashMap<Integer, Map<String, String>>) pMap;
PMAP键入:
Map<Object, Map<Object, Object>> pMap
不幸的是,它不起作用,我很想知道为什么,以及是否有可能避免这个问题。
我想投一个地图是这样的:不能投<对象,地图<对象,对象>>地图为更具体的类型化地图
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 Tutorials中有进一步的解释。
好的,谢谢。我想我必须找到另一种优雅的方式,使其尽可能通用。 – Greezer
我不太熟悉泛型类,但你可以试试地图< ?,地图>地图 替换Integer后?它会很容易地处理Integer,正如你在上面写的那样,这个键也可以是字符串,所以我希望它对你有用。
我用'?'而不是'Object'尝试过,但它是一样的,剧组被禁止。我所做的是通过迭代器投射,我不能直接投射地图。 谢谢你的回答。 – Greezer
所以,这里是我做过什么来避免这个问题:
我输入我的地图是这样的:
Map<? super Object, ? super Object>
和它的作品,我可以把任何我想这里面映射。它可以是:
Map<String, String>
或:
Map<Integer, Map<String, String>>
等,这是更灵活的方式,我发现。唯一的限制是我在地图上操作时(通过Iterator
或keySet
)投射地图。
希望它可以帮助某人。
如果你确定pMap的键是一个整数,那么你可以使用以下类型的pMap .... Map> pMap –
这就是问题所在,有时候我会使用String而不是Integer作为键。 – Greezer
然后,您可以将'map'的键声明为Object,并在键或值上进行操作。 –