" get'之间的区别VS" getProperty"

时间:2012-06-19 15:32:42

标签: java properties-file

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时没有返回“钢铁”?

3 个答案:

答案 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是继承的,并返回ObjectgetPropertyProperties的成员,并返回{{1} }}

似乎他们应该返回相同的内容,但是再次从docs返回:

  

如果在此属性列表中找不到该键,则会检查默认属性列表及其默认值(递归)。

所以最好使用String,因为如果找不到它,它将返回默认值。

答案 2 :(得分:0)

您的第二个Properties对象(propsprop1?)没有直接添加属性。它仅使用myProp作为默认值。因此,这些值永远不会添加到支持HashMapProperties.getProperty()找不到"材料"在后台HashMap中,它可以查看默认值。但是继承的HashMap.get() 在支持HashMap中查找,而不是在传递给构造函数的默认值中。