1

私の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))

両方のアサートがパスすると予想していましたが、最初のアサートのみがパスし、2 番目のアサートは失敗しました。

これに対する説明は大歓迎です。ありがとう!

4

1 に答える 1

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のメソッドを呼び出しています。デフォルトは の一部であり、 ではありません。getPropertiesHashtable

println(results.getProperty(KEY))
>>> b
println(results.getAt("a"))
>>> null
println(results.get("a"))
>>> null

これは「正しい」動作ですか?そうではない可能性が高いProperties.getAtです。

于 2012-06-02T01:05:52.600 に答える