报错:无法将Map.of结果赋值给HashMap,能否用其初始化HashMap?
用Map.of初始化HashMap的问题
报错原因
Map.of()返回的是Java内置的不可变Map实现类(并非HashMap),而HashMap是Map接口的一个可变实现类。Java的类型系统不允许将非HashMap类型的Map实例直接赋值给HashMap类型的引用,这就是你看到类型不匹配报错的原因。
可行的初始化方式
如果你想用Map.of()来初始化HashMap,可以通过以下两种方式:
- 利用HashMap的构造器接收Map参数:
HashMap<String, String> hashMap = new HashMap<>(Map.of("name", "Murife"));
- 使用Java 10+提供的
HashMap.copyOf()方法:
HashMap<String, String> hashMap = HashMap.copyOf(Map.of("name", "Murife"));
关于Map.of()的说明
Map.of()的设计目的是快速创建不可变的Map实例,它可以直接赋值给Map接口引用,但并不直接返回HashMap或其他具体的可变Map实现类。如果业务场景不需要修改Map内容,直接用Map<String, String> map = Map.of("name", "Murife")就足够;如果需要可变的HashMap实例,就用上面提到的两种转换方式。
内容的提问来源于stack exchange,提问作者Emmanuel Njorodongo
相关产品推荐
相关产品推荐

