2012-11-01 82 views
0

我想投一个地图是这样的:不能投<对象,地图<对象,对象>>地图为更具体的类型化地图

Map<Integer, Map<String, String>> map = 
       (HashMap<Integer, Map<String, String>>) pMap; 

PMAP键入:

Map<Object, Map<Object, Object>> pMap 

不幸的是,它不起作用,我很想知道为什么,以及是否有可能避免这个问题。

+0

如果你确定pMap的键是一个整数,那么你可以使用以下类型的pMap .... Map > pMap –

+0

这就是问题所在,有时候我会使用String而不是Integer作为键。 – Greezer

+1

然后,您可以将'map'的键声明为Object,并在键或值上进行操作。 –

回答

3

这是因为即使IntegerObject一个亚型,Map<Integer, Integer>Map<Object, Object>亚型。

你根本不能这样。

这在Java Tutorials中有进一步的解释。

+0

好的,谢谢。我想我必须找到另一种优雅的方式,使其尽可能通用。 – Greezer

0

我不太熟悉泛型类,但你可以试试地图< ,地图>地图 替换Integer后?它会很容易地处理Integer,正如你在上面写的那样,这个键也可以是字符串,所以我希望它对你有用。

+0

我用'?'而不是'Object'尝试过,但它是一样的,剧组被禁止。我所做的是通过迭代器投射,我不能直接投射地图。 谢谢你的回答。 – Greezer

0

所以,这里是我做过什么来避免这个问题:

我输入我的地图是这样的:

Map<? super Object, ? super Object> 

和它的作品,我可以把任何我想这里面映射。它可以是:

Map<String, String> 

或:

Map<Integer, Map<String, String>> 

等,这是更灵活的方式,我发现。唯一的限制是我在地图上操作时(通过IteratorkeySet)投射地图。

希望它可以帮助某人。

相关问题