Groovy属性断言失败

时间:2012-06-02 00:52:22

标签: properties groovy assert

以下是我的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))

我希望两个断言都通过,但只有第一个断言通过而第二个断言失败。

非常感谢对此的任何解释。谢谢!

1 个答案:

答案 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 会有序。