java - 为什么我不能创建字符串和通用对象的映射

标签 java generics map 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是一切的父类(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/

相关文章:

java - 嵌入式 jetty 中的异步 servlet 似乎在高负载时写入错误响应

使用 Swing 的 Java 聊天应用程序(概念)

C++ std::map<std::string, int> 获取键以特定字符串开头的值

Java,无法找到或加载主类

java - 在 Java 中保存到磁盘之前压缩图像

C# 类型转换为通用接口(interface)

arrays - 无法使用 CountableRange<Int> 类型的索引为 Array<Element> 类型的值添加下标

C# - 即使在正确的通用约束之后,堆栈推送操作也不起作用

c++ - 构造函数中的以下代码会生成警告

hadoop - 如何在 Hive (Hadoop) 中解析一个字符串(来自不同的表)并将其加载到不同的表