“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
。
getProperty
由Properties
引入,并声明返回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
,而getProperty
是Properties
的成员并返回String
。
看起来他们应该返回相同的结果,但是再次来自docs:
如果在此属性列表中找不到键,则递归检查默认属性列表及其默认值。
所以最好使用getProperty
,如果找不到它会返回默认值。
【讨论】:
【参考方案3】:您的第二个 Properties
对象(props
或 prop1
?)没有直接添加任何属性。它仅使用 myProp
作为默认值。所以这些值永远不会被添加到支持HashMap
。 Properties.getProperty()
在支持的 HashMap 中找不到“材料”,因此它可以查看默认值。但是继承的HashMap.get()
仅查看支持的 HashMap,而不是您传递给构造函数的默认值。
【讨论】:
以上是关于“get”与“getProperty”之间的区别的主要内容,如果未能解决你的问题,请参考以下文章
System.getProperty("line.separator"); 之间的区别和“\n”?
System.getProperty System.getenv 区别 log4j取法