首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将java.util.Properties转换为HashMap<String,String>

将java.util.Properties转换为HashMap<String,String>
EN

Stack Overflow用户
提问于 2013-06-20 16:51:53
回答 14查看 113.1K关注 0票数 101
代码语言:javascript
复制
Properties properties = new Properties();
Map<String, String> map = new HashMap<String, String>(properties);// why wrong?

java.util.Propertiesjava.util.Map的实现,java.util.HashMap's constructor接收Map类型参数。那么,为什么一定要显式转换呢?

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2013-06-20 16:54:53

这是因为Properties extends Hashtable (反过来实现了Map<Object, Object>)。您尝试将其输入到Map<String, String>中。因此它是不兼容的。

您需要将字符串属性一个接一个地输入到您的映射中...

例如:

代码语言:javascript
复制
for (final String name: properties.stringPropertyNames())
    map.put(name, properties.getProperty(name));
票数 99
EN

Stack Overflow用户

发布于 2014-10-09 19:07:04

要做到这一点,有效的方法是按如下方式转换为通用Map:

代码语言:javascript
复制
Properties props = new Properties();

Map<String, String> map = (Map)props;

这将把一个Map<Object, Object>转换成一个原始的映射,这对于编译器来说是"ok“的(只是警告)。一旦我们有了一个原始的Map,它将转换为Map<String, String>,它也将是"ok“(另一个警告)。您可以使用注记@SuppressWarnings({ "unchecked", "rawtypes" })忽略它们

这是可行的,因为在JVM中,对象实际上没有泛型类型。泛型类型只是一个在编译时验证事物的技巧。

如果某个键或值不是字符串,则会产生ClassCastException错误。在当前的Properties实现中,只要不使用Properties的超级Hashtable<Object,Object>中的可变调用方法,这种情况就不太可能发生。

所以,如果你不想用你的Properties实例做一些讨厌的事情,这就是你要做的。

票数 51
EN

Stack Overflow用户

发布于 2015-03-31 10:46:48

票数 37
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17209260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档