2012-07-23 62 views
0

我有一个方法(我们称之为doSomething),它需要一个Map<String,Object>,我想通过Map<String,Foo>(Foo extends Object,当然)。当我编译时,它说doSomething不能应用于给定的类型。这里是我的代码:具有多态的泛型映射

public class FooMapChoo { 

     private Map<String, Foo> map; 

     public void doSomething(Map<String,Object>) { 
     } 

     public static void main(String...args) { 
      doSomething(map); 
     } 

    } 

编译器输出:

method doSomething in class FooMapChoo cannot be applied to given types; 
        doSomething(map); 
        ^
     required: Map<String,Object> 
     found: Map<String,Foo> 

这在我看来,富应该多态转换为对象。我也尝试铸造mapMap<String,Object>,这只是告诉我“不可兑换的类型”。我能做些什么来解决多态性问题?

+0

的[是'名单'名单的'子类'可能重复?为什么不是Java的泛型隐式多态?](http://stackoverflow.com/questions/2745265/is-listdog-a-subclass-of-listanimal-why-arent-javas-generics-implicit) – trutheality 2012-07-23 00:16:47

+0

你是对的。感谢您找到那个。 – LastStar007 2012-07-23 02:01:13

+0

现在,你知道如何解决这个问题吗? – LastStar007 2012-07-23 03:33:53

回答

6

您需要使用通配符

Map<String, ? extends Object> 
+2

或'地图'会做。 +1 – 2012-07-23 00:53:10

+2

真正的男人明确地扩展对象:) – LastStar007 2012-07-23 02:01:37