Java 为什么我能';t创建字符串和泛型对象的映射

Java 为什么我能';t创建字符串和泛型对象的映射,java,generics,map,hashmap,Java,Generics,Map,Hashmap,我正试着做这样的事情 final Map<String, ? extends Object> params = new HashMap<String, ? extends Object>(); final Map params=new HashMap(); 但是java编译器抱怨“无法实例化HashMap()类型 它是什么??extensed Object是一个通配符。它代表“某个未知类型,我们唯一知道的是它是Object的子类型”。在声明中可以,但不能实例化它,

我正试着做这样的事情

  final Map<String, ? extends Object> params = new HashMap<String, ? extends Object>();
final Map params=new HashMap();
但是java编译器抱怨“无法实例化HashMap()类型


它是什么?

?extensed Object
是一个通配符。它代表“某个未知类型,我们唯一知道的是它是
Object
的子类型”。在声明中可以,但不能实例化它,因为它不是实际类型。请尝试

final Map<String, ? extends Object> params = new HashMap<String, Object>();
关于这个主题的一个好的介绍,请看Java语言泛型教程,特别是它之后的教程

? extends Object
不计算为任何类型。所以你不能这样说。 1.如果您想要任何类型的扩展对象,那么为什么不直接传递对象呢。 扩展对象的任何类型也是一个对象。默认情况下,每个Java类类型都扩展对象。 2.如果你想让TypeA扩展TypeB, 那你就可以像这样做了

Map<String, TypeB>
Map

但是如果我想呢store@Saurabh这很好,因为String类(与几乎所有类一样)是对象的子类。如果您想在HashMap中存储任何类的实例,则此实现可以正常工作。有关您实际尝试实现的内容的一些详细信息可能有助于我们确定这是否是正确的方法。我想听听为什么
final Map params=Collections.emptyMap()
不起作用。在尝试放置
时抛出
不支持操作异常
此外,IntelliJ(在Java 14中)建议执行
Map
而不是
Map
。。。
Map<String, TypeB>