我正在尝试做这样的事情
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
是一切的父类(super class)型,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 语言教程,尤其是。 this page以及它之后的那个。
关于java - 为什么我不能创建字符串和通用对象的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6954509/