java.util.Properties
类用于表示一个键和值都为字符串的映射表。这是因为Properties
对象用于读取文本文件.properties
。
那么,为什么在Java 5中要改装这个类来实现Map<Object,Object>
而不是Map<String,String>
呢?
javadoc中提到:
由于
Properties
继承自Hashtable
,所以put和putAll方法可以应用于Properties
对象。它们的使用强烈不建议,因为它们允许调用者插入键或值不是字符串的条目。应该使用setProperty方法。如果在“受损”Properties
对象上调用store或save方法包含非字符串键或值,则调用将失败。
既然键和值都应该是字符串,那么为什么不通过正确的泛型类型静态地强制执行呢?
我想,让Properties
实现Map<String,String>
可能不完全向后兼容于为Java 5编写的代码。如果您有将非字符串插入Properties
对象的旧代码,那么该代码将无法在Java 5中编译。但是... 那不是一件好事吗?泛型的整个目的不就是在编译时捕捉此类类型错误吗?