2012-06-19 52 views
15
Properties myProp = new Properties(); 
myProp.put("material", "steel"); 

Properties prop1 = new Properties(myProp); 

System.out.println(prop1.get("material") + ", " + prop1.getProperty("material")); 
// outputs "null, steel" 

是不是得到類似的getProperty它返回它爲什麼沒有返回的 對象?項/屬性意義上的‘使用時得到的鋼鐵’?差異「獲得」 VS‘的getProperty’

+0

存在語法錯誤,您可能需要將'props'更改爲'prop1' – SomeKittens

回答

21

getHashtable繼承,並聲明爲返回Object

getPropertyProperties介紹,並聲明爲返回String

請注意getProperty將查詢您可以傳遞給構造函數Properties的「默認」屬性; get不會。在大多數情況下,它們會返回相同的值。在這個例子中,你已經給了,你使用默認的後盾屬性:

  • prop1直接包含"material"一個條目,因此爲什麼get被返回null。
  • myProp確實包含"material"的條目,所以當你調用prop1.getProperty("material"),它會發現,它並沒有直接,並在myProp檢查代替,並找到"steel"那裏。
+0

它與返回類型無關。這隻與他*只*添加了第二個屬性的默認值並沒有實際的「第一類」屬性有關。所以HashMap.get()將永遠不會在他的第二個屬性中找到任何東西。 –

+0

@KevinWelker:你是否否認返回類型*是兩種方法之間的差異?前兩位我就是這麼說的。 –

+0

不,它只是沒有回答他爲什麼get返回null的問題。 –

3

一看docs表明get是繼承,並返回ObjectgetPropertyProperties一個構件,並返回String

貌似他們應該返回相同的,然而再次從docs

如果在此屬性列表中未找到該鍵,默認屬性列表,它的默認值,遞歸,然後檢查。

所以最好使用getProperty,因爲如果找不到,它將返回默認值。

0

您的第二個Properties對象(propsprop1?),沒有直接添加過任何屬性。它僅使用myProp作爲默認值。所以這些值永遠不會被添加到支持HashMapProperties.getProperty()在支持HashMap中找不到「材質」,因此它可以查看默認值。但繼承的HashMap.get()只有查找支持HashMap而不是您傳遞給構造函數的默認值。