2013-06-18 99 views
2

我一次又一次地讀了the javadoc of this class,但還是弄不清楚區別。Java的屬性:.propertyNames()和.stringPropertyNames()之間的區別?

除了明顯的區別.propertyNames()返回Enumeration.stringPropertyNames()返回Set,據我所知,兩種方法返回相同的內容。至少我的沉思是這麼說的。

這些方法返回的內容可能會有不同的結果嗎?我看到的唯一可能性是,使用Enumeration的第二種方法可能會返回不同的結果,因爲Properties實現的Hashtable已完全同步實例。但除此之外呢?

回答

3

這些方法返回的內容可能會有不同的結果嗎?

絕對。從文檔:

其鍵或值不是String類型的屬性將被省略。

Properties延伸Hashtable,這是一個愚蠢的決定 - 但它意味着你可以寫:

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

stringProperties()方法將不會返回他們的任何,但properties()會。

+0

嗯,好,現在說我從一個屬性文件(這是我真正做的)啓動一個'屬性',結果會不一樣嗎? – fge

+0

@fge:很可能不會。 (由於不同的回報類型,他們仍然需要單獨的方法,但這是另一回事。) –

+0

呃,就像通常那樣,你提出了有效的,顯而易見的,無可爭辯的觀點...我需要做的這裏有更多的測試。看起來Hashtable是線程安全的,只是手邊問題的一部分......我想知道如果你在注入一個不是String的鍵時嘗試「序列化」一個Properties對象,結果會是什麼,對於一個... – fge

相關問題