2012-05-10 58 views
2

为什么下面的代码给一个编译时错误。错误泛型代码

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

编译时错误。

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

我想用String作为键地图和该类型接受任何对象作为价值

回答

6

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

试试这个:

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

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

这工作虽然罚款:

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

然而,他说,?应该延伸Object是一种多余的,因为一切都扩展对象(你当然可以有你的真实代码的东西比Object其他)。

+1

如果你这样做,但是,你不能把任何东西在你的地图(如它的唯一的参考是通配符通用)。 –

+1

的确如此。我只是试图说明它实际上需要具体的类型参数。 – aioobe