我有一张
secondaryOutputProperties
地图,
private val secondaryOutputProperties = mutableMapOf<URI, MutableMap<QName, XdmValue>>()
我有一个
uri: URI
,它实际上来自另一张地图的键。
我出现了莫名其妙的 NPE。考虑这段代码:
for ((puri, _) in secondaryOutputProperties) {
println("Map URI: $puri, ${puri.equals(uri)}")
}
println("Key URI: $uri")
val x = secondaryOutputProperties[uri]
println("s[uri] = ${x}")
val y = secondaryOutputProperties.get(uri)
println("s.get(uri) = ${y}")
println("in? ${uri in secondaryOutputProperties}")
println("conains? ${secondaryOutputProperties.containsKey(uri)}")
输出为:
Map URI: file:/Volumes/Projects/xproc/test-suite/test-suite/tests/secondary-false, true
Map URI: file:/Volumes/Projects/xproc/test-suite/test-suite/tests/secondary-true, false
Key URI: file:/Volumes/Projects/xproc/test-suite/test-suite/tests/secondary-false
s[uri] = null
s.get(uri) = null
in? false
conains? false
方法中的下一条语句是:
val serprops = secondaryOutputProperties[uri]!!
这会引发 NPE。
这是一个单线程程序,因此没有其他线程从地图中删除键或类似的东西。怎么
puri.equals(uri)
返回true
,但是get()
找不到值?
我认为我忽略了一些明显的东西,但我没有看到它......
这是一个多线程错误。 #脸红
我的代码:单线程。第三方库:没那么多。
对于噪音深表歉意。