19
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 时不返回“钢”?

4

3 回答 3

26

get继承自Hashtable,并声明为 return Object

getProperty由 引入Properties,并被声明为 return String

请注意,这getProperty将参考您可以传递给构造函数的“默认”属性Propertiesget惯于。在大多数情况下,它们会返回相同的值。在您给出的示例中,您使用的是默认支持属性:

  • prop1直接包含 的条目"material",因此为什么get返回 null。
  • myProp 确实包含一个条目"material",所以当你调用它时prop1.getProperty("material"),它会发现它没有直接它,myProp而是签入,然后在"steel"那里找到。
于 2012-06-19T15:34:32.820 回答
4

查看文档显示它get是继承的,并返回Object,而getProperty它是的成员Properties并返回String.

似乎他们应该返回相同的结果,但是再次从文档中返回:

如果在该属性列表中未找到该键,则递归地检查默认属性列表及其默认值。

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

于 2012-06-19T15:38:12.240 回答
0

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

于 2012-06-19T15:45:39.143 回答