修复Java属性

时间:2011-11-10 23:01:15

标签: java

Java Properties docs强烈反对使用put和putAll方法。我刚看了一下Properties类的源代码,看到扩展的Hashtable参数化类型设置为Object而不是String,我有点惊讶。除了向后兼容性之外还有其他原因吗? Can Properties类也不会覆盖put和putAll方法带有额外的前提条件(我知道它违反了LKP,但是扩展Hashtable无论如何都是一个糟糕的选择),大致如下:

if(p1 instanceof String && p2 instanceof String) {
          return super.put(p1, p2);         
}else {
          throw new IllegalArgumentException("Invalid argument type");
}

谢谢,

Abidi

2 个答案:

答案 0 :(得分:1)

我同意它非常烦人(并且在API文档中记录不足),但是,这是为了向后兼容。

在预通用java中,如果使用非String作为值调用put(key, value),则Properties实例不会抛出异常(但它会从{{1}返回null })。

如果他们已经实施了上述修改,那么相同的调用代码将“更快地失败”。数以百计的Java应用程序和世界各地的servlet可能无法正常加载,并且会有很多的哀嚎和咬牙切齿。

希望有所帮助。

答案 1 :(得分:0)

我同意你提到的测试会更好,但我猜属性类的作者并不像你那么聪明:)