Properties properties = new Properties();
Map<String, String> map = new HashMap<String, String>(properties);// why wrong?java.util.Properties是java.util.Map的实现,java.util.HashMap's constructor接收Map类型参数。那么,为什么一定要显式转换呢?
发布于 2013-06-20 16:54:53
这是因为Properties extends Hashtable (反过来实现了Map<Object, Object>)。您尝试将其输入到Map<String, String>中。因此它是不兼容的。
您需要将字符串属性一个接一个地输入到您的映射中...
例如:
for (final String name: properties.stringPropertyNames())
map.put(name, properties.getProperty(name));发布于 2014-10-09 19:07:04
要做到这一点,有效的方法是按如下方式转换为通用Map:
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实例做一些讨厌的事情,这就是你要做的。
发布于 2015-03-31 10:46:48
你可以使用Google Guava的:
https://stackoverflow.com/questions/17209260
复制相似问题