首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
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

Stack Overflow用户

发布于 2013-06-20 16:58:31

问题是Properties实现了Map<Object, Object>,而HashMap构造函数需要一个Map<? extends String, ? extends String>

This answer解释了这个(相当违反直觉的)决定。简而言之:在Java5之前,Properties实现了Map (因为当时还没有泛型)。这意味着您可以将任何Object放入Properties对象中。This is still in the documenation:

因为Properties继承自Hashtable,所以putputAll方法可以应用于Properties对象。强烈反对使用它们,因为它们允许调用者插入键或值不是Strings的条目。应该改用setProperty方法。

为了保持兼容性,设计者别无选择,只能让它继承Java5中的Map<Object, Object>。这是努力完全向后兼容的不幸结果,这使得新代码变得不必要地令人费解。

如果您只在Properties对象中使用字符串属性,那么您应该能够在构造函数中使用未经检查的强制转换:

代码语言:javascript
复制
Map<String, String> map = new HashMap<String, String>( (Map<String, String>) properties);

或不带任何副本:

代码语言:javascript
复制
Map<String, String> map = (Map<String, String>) properties;
票数 5
EN
查看全部 14 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17209260

复制
相关文章

相似问题

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