以下是我的groovy文件的内容:
def KEY = "a"
Properties myProp = new Properties()
myProp[KEY] = "b"
assert(myProp[KEY] == myProp.getProperty(KEY))
Properties results = new Properties(myProp)
assert(results[KEY] == results.getProperty(KEY))
我希望两个断言都通过,但只有第一个断言通过而第二个断言失败。
非常感谢对此的任何解释。谢谢!
答案 0 :(得分:1)
因此,当文档说“创建一个空的属性列表”时,就是它的作用:
println(results)
>>> [:]
查看getProperty
的作用:
在此属性列表中搜索具有指定键的属性。如果在此属性列表中找不到该键,则会检查默认属性列表及其默认值(递归)。如果找不到该属性,则该方法返回null。
得出结论:[]
(getAt
)不搜索默认属性列表。
我们可以通过这个来了解Groovy如何实现getAt
:
public static <K,V> V getAt(Map<K,V> self, K key) {
return self.get(key);
}
所以它调用基础Hashtable
的{{1}}方法,该方法对默认属性列表一无所知 - 默认值是get
的一部分,而不是Properties
:< / p>
Hashtable
这是“正确”行为吗?可能不是 - 也许println(results.getProperty(KEY))
>>> b
println(results.getAt("a"))
>>> null
println(results.get("a"))
>>> null
会有序。