Sau*_*mar 11 java generics hashmap map
我想做这样的事情
final Map<String, ? extends Object> params = new HashMap<String, ? extends Object>();
Run Code Online (Sandbox Code Playgroud)
但java编译抱怨说"无法实例化HashMap();
什么是旺了...?
jw0*_*013 16
? extends Object是一个通配符.它代表"一些未知的类型,我们唯一知道的是它是一个子类型Object".它在声明中很好但你不能实例化它,因为它不是一个实际的类型.尝试
final Map<String, ? extends Object> params = new HashMap<String, Object>();
Run Code Online (Sandbox Code Playgroud)
因为您不知道它是什么类型,?所以您无法为其分配任何内容.由于Object是所有事物的超类型,params因此可以指定对两者HashMap<String, Integer>以及HashMap<String, String>许多其他事物的引用.A String不是Integer也不是Integera String.编译器无法知道哪个params可能,因此放入任何内容都不是有效的操作params.
如果你希望能够把<String, String>在params随后宣布它是这样.例如,
final Map<String, Object> params = new HashMap<String, Object>();
params.put("a", "blah");
Run Code Online (Sandbox Code Playgroud)
有关该主题的详细介绍,请参阅关于泛型的Java语言教程,尤其是.这个页面和之后的那个.