泛型代码出错

时间:2012-05-10 10:13:06

标签: java generics

为什么以下代码会产生编译时错误。

    Map<String,? extends Object> inputMap = 
                 new HashMap<String, ? extends Object>();

编译时错误。

  

无法实例化类型HashMap<String,? extends Object>

我想要一个以String作为键的地图,并将任何对象作为值

2 个答案:

答案 0 :(得分:6)

这是因为您需要指定 HashMap应包含的值的类型。基本上,在实例化类时不能使用通配符。

这样可以正常工作:

Map<String, ? extends Object> inputMap = new HashMap<String, Object>();

然而,说?应该扩展Object是多余的,因为所有内容都扩展了对象(当然,你的实际代码中除了Object之外还有其他东西)。 / p>

答案 1 :(得分:6)

?并不意味着“接受任何对象”。它意味着“采取特定类型的对象,恰好是未知的”,这在实际创建容器时没有意义。

请改为尝试:

 Map<String,Object> inputMap = new HashMap<String,Object>();