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类似 一个东西?为什么在使用get时没有返回“钢铁”?
答案 0 :(得分:22)
get
继承自Hashtable
,并声明返回Object
。
getProperty
引入了 Properties
,并宣布返回String
。
请注意,getProperty
将参考“defaults”属性,您可以将这些属性传递给Properties
的构造函数; get
不会。在大多数情况下,它们会返回相同的值。在您给出的示例中, 使用默认的后备属性:
prop1
不直接包含"material"
的条目,因此get
返回null的原因。myProp
确实包含"material"
的条目,因此当您致电prop1.getProperty("material")
时,它会发现它没有直接拥有它,并检查而是在myProp
中找到"steel"
。答案 1 :(得分:3)
查看docs显示get
是继承的,并返回Object
而getProperty
是Properties
的成员,并返回{{1} }}
似乎他们应该返回相同的内容,但是再次从docs返回:
如果在此属性列表中找不到该键,则会检查默认属性列表及其默认值(递归)。
所以最好使用String
,因为如果找不到它,它将返回默认值。
答案 2 :(得分:0)
您的第二个Properties
对象(props
或prop1
?)没有直接添加属性。它仅使用myProp
作为默认值。因此,这些值永远不会添加到支持HashMap
。 Properties.getProperty()
找不到"材料"在后台HashMap中,它可以查看默认值。但是继承的HashMap.get()
仅在支持HashMap中查找,而不是在传递给构造函数的默认值中。