【发布时间】:2010-10-26 18:55:09
【问题描述】:
java.util.Properties 类用于表示键和值都是字符串的映射。这是因为Properties 对象用于读取.properties 文件,这些文件是文本文件。
那么,为什么在 Java 5 中他们改造这个类来实现 Map<Object,Object> 而不是 Map<String,String>?
javadoc 声明:
因为 Properties 继承自 Hashtable,所以 put 和 putAll 方法可以应用于 Properties 对象。强烈建议不要使用它们,因为它们允许调用者插入键或值不是字符串的条目。应该改用 setProperty 方法。如果对包含非字符串键或值的“受损”属性对象调用 store 或 save 方法,则调用将失败。
既然键和值都应该是字符串,那么为什么不使用适当的泛型类型来静态地强制执行呢?
我猜想使 Properties 实现 Map<String,String> 不会完全向后兼容为 Java 5 之前编写的代码。如果您有将非字符串粘贴到 Properties 对象中的旧代码,那么该代码将不再编译Java 5。但是……这不是一件好事吗?泛型的重点不是在编译时捕获此类类型错误吗?
【问题讨论】:
标签: java generics collections