“get”与“getProperty”之间的区别

Posted

技术标签:

【中文标题】“get”与“getProperty”之间的区别【英文标题】:Difference between "get' VS "getProperty" 【发布时间】:2012-06-21 16:40:22 【问题描述】:
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时不返回'steel'?

【问题讨论】:

语法错误,你可以把props改成prop1 【参考方案1】:

get继承自Hashtable,并声明返回Object

getPropertyProperties引入,并声明返回String

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

prop1直接包含 "material" 的条目,因此 get 返回 null。 myProp确实包含了"material"的入口,所以当你调用prop1.getProperty("material")的时候,会发现它没有直接拥有,而是签入myProp,找到@ 987654337@那里。

【讨论】:

与返回类型无关。这仅与他将默认值添加到第二个属性而没有实际的“第一类”属性这一事实有关。所以 HashMap.get() 永远不会在他的第二个属性中找到任何东西。 @KevinWelker:您是否否认返回类型是两种方法之间的差异?这就是我在前两位中想要表达的全部内容。 不,它只是没有回答他关于为什么 get 返回 null 的问题。 @KevinWelker:幸运的是,最后一段已经回答了这个问题,我现在对其进行了编辑以使其更清楚:) 有一个边缘情况,我想补充一下。如果 Properties-class 的后备 Map 具有一个不是 String 的属性,则首选默认值,即使未设置也是如此。因此,即使您使用 put 与该键一起添加非空值,您也可以为键获取 null。【参考方案2】:

查看docs 表明get 被继承,并返回Object,而getPropertyProperties 的成员并返回String

看起来他们应该返回相同的结果,但是再次来自docs:

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于“get”与“getProperty”之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

System.getProperty("line.separator"); 之间的区别和“\n”?

HTTP请求的GET与POST方式的区别

System.getProperty System.getenv 区别 log4j取法

Jquery AJAX POST与GET之间的区别

java中getAttribute和getParameter的区别

app.get - res.send 与 return res.send 之间有啥区别吗