我想做这样的事情
final Map<String, ? extends Object> params = new HashMap<String, ? extends Object>();
但java编译抱怨说“无法实例化HashMap();
什么是旺了...?
我想做这样的事情
final Map<String, ? extends Object> params = new HashMap<String, ? extends Object>();
但java编译抱怨说“无法实例化HashMap();
什么是旺了...?
? extends Object
是一个通配符。它代表“一些未知的类型,我们唯一知道的是它是它的一个子类型 Object
“。声明很好,但你不能实例化它,因为它不是一个真正的类型。试试吧
final Map<String, ? extends Object> params = new HashMap<String, Object>();
因为你不知道是什么类型的 ?
你不能给它任何东西。以来 Object
是一切的超类型, params
可以为其分配对两者的引用 HashMap<String, Integer>
以及 HashMap<String, String>
,还有很多其他的事情。一个 String
不是 Integer
也不是 Integer
一个 String
。编译器无法知道哪个 params
可能是,因此放入任何东西都不是有效的操作 params
。
如果你想能够放 <String, String>
在 params
然后声明它。例如,
final Map<String, Object> params = new HashMap<String, Object>();
params.put("a", "blah");
有关该主题的详细介绍,请参阅有关泛型的Java语言教程,尤其是。 这一页 和之后的那个。
? extends Object
不评估任何类型。所以你不能这样提。 1.如果你想AnyType extends Object,那你为什么不简单地传递Object。 因为任何扩展Object的类型也是一个Object。默认情况下,每个Java类都扩展了Object。 2.如果你想特意TypeA扩展TypeB, 然后你可以这样做
Map<String, TypeB>