为什么 java.util.Properties 扩展 Hashtable<Object, Object> 而不是 Hashtable<String, String>?

Why does java.util.Properties extend Hashtable<Object, Object> instead of Hashtable<String, String>?

如标题所述:我想找到为什么 java.util.Properties 扩展 Hashtable<Object, Object> 而不是 Hashtable<String, String> 的问题的答案?

class Properties extends Hashtable<Object,Object> { ... }

我想知道,因为方法 setProperty(String key, String value) 只接受字符串值,并且属性基于字符串 key-value 表示。完整的方法 body 在上面的 link 和这里:

public synchronized Object setProperty(String key, String value) {
    return put(key, value);
}

getProperty(String key) 方法和其他方法也是如此。

扩展 Hashtable<Object, Object> 并使用字符串有什么具体原因吗?像这样使用 Hastable<Object, Object>HashMap<Object, Object> 时,我应该注意什么 use-case 吗?

原因之一:class早于仿制药。

Since: JDK1.0

更新 Java 泛型库的团队必须在“现在我们可以准确捕获语义”和“人们会有很多错误代码”之间取得平衡。大多数时候,这些库被更新为使用现有代码进行编译和 运行,但在特定方面需要付出一定的代价。