gpt4 book ai didi

java - 将对象放入 java.util.Properties

转载 作者:搜寻专家 更新时间:2023-10-30 21:02:19 25 4
gpt4 key购买 nike

我试图理解为什么以这种方式实现 java.util.Properties。它有两个接口(interface):只接受字符串的getProperty/setProperty,以及接受任何对象作为值的put/get。这两个接口(interface)似乎是重叠的,因此可以使用 getProperty() 检索使用 put() 添加的字符串。

这个奇怪的混合界面似乎有一些问题。放置一个覆盖字符串属性的对象具有清除字符串值的副作用,产生 null 作为 getProperty 结果。添加一个整数或具有简单字符串转换的其他一些值可能会被误解为真正的属性值(但作为属性它始终为 null)。

我的问题是:这是否有真实、实际的原因?还是我怀疑它是半生不熟的实现?

最佳答案

Joshua BlochEffective Java 中明确提到了这一点

[from Chapter 4] In the case of Properties, the designers intended that only strings be allowed as keys and values, but direct access to the underlying Hashtable allows this invariant to be violated. Once this invariant is violated, it is no longer possible to use other parts of the Properties API (load and store). By the time this problem was discovered, it was too late to correct it because clients depended on the use of nonstring keys and values.

该文本是在使用组合而不是继承的上下文中。他基本上是用这个作为何时应该使用组合而不是继承的例子。如果 Properties 包装了一个 Map 而不是扩展一个,它可能会强制使用 String 作为键和值的不变性。

所以答案是:这是一个疏忽。

关于java - 将对象放入 java.util.Properties,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30381563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com