Java';s属性:.propertyNames()和.stringPropertyNames()之间的差异?

Java';s属性:.propertyNames()和.stringPropertyNames()之间的差异?,java,Java,我读了一次又一次,但还是不明白其中的区别 除了返回枚举和返回集的明显区别之外,就我所见,这两种方法都返回相同的内容。至少我的想法是这样的 这些方法返回的内容之间的结果会有所不同吗?我看到的唯一可能性是,第二种方法使用枚举,如果实例已被修改,则可能返回不同的结果,因为属性实现了完全同步的哈希表。但除此之外呢 这些方法返回的内容之间的结果会有所不同吗 当然。从文档中: 忽略键或值不是字符串类型的属性 Properties扩展了Hashtable,这是一个愚蠢的决定-但这意味着您可以编写: Prope

我读了一次又一次,但还是不明白其中的区别

除了返回
枚举
和返回
的明显区别之外,就我所见,这两种方法都返回相同的内容。至少我的想法是这样的

这些方法返回的内容之间的结果会有所不同吗?我看到的唯一可能性是,第二种方法使用
枚举
,如果实例已被修改,则可能返回不同的结果,因为
属性
实现了完全同步的
哈希表
。但除此之外呢

这些方法返回的内容之间的结果会有所不同吗

当然。从文档中:

忽略键或值不是字符串类型的属性

Properties
扩展了
Hashtable
,这是一个愚蠢的决定-但这意味着您可以编写:

Properties p = new Properties();
p.put(new Object(), "Wow, a non-string key");
p.put("fred", new StringBuilder("Non-string value"));

stringPropertyNames()
方法不会返回它们中的任何一个,但是
propertyNames()
会返回它们。

Hmm,好吧,现在假设我从属性文件启动一个
Properties
(这是我真正做的),结果会有所不同吗?@fge:很可能不会。(由于返回类型不同,它们仍然需要是单独的方法,但这是另一回事。)呃,好吧,就像你通常说的那样,你提出了有效的、明显的、无可争议的观点。。。我需要在这里做更多的测试。看来哈希表是线程安全的只是当前问题的一部分。。。我想知道,如果您尝试“序列化”一个属性对象,而将其注入一个不是
字符串的键,结果会是什么…@fge:我不确定您考虑的线程安全问题是什么。但另一点是,如果在迭代结果时添加新键(很可能在同一线程中),枚举和集合实现的行为可能会有所不同。。。我想我的问题有点太宽泛了。。。事实上,我“私下”创建了一个
Properties
实例并从属性文件中读取;我的问题是,真的,当从属性文件中读取时,这两种方法是否可能不同。。。我想这听起来有点傻;但Javadoc对此并不十分清楚。我会重新措辞。。。