当其中一个键对于 equals 返回 true 时,Kotlin 怎么会无法在 LinkedHashMap 中找到值?

问题描述 投票:0回答:1

我有一张

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()
找不到值?

我认为我忽略了一些明显的东西,但我没有看到它......

kotlin jvm linkedhashmap
1个回答
0
投票

这是一个多线程错误。 #脸红

我的代码:单线程。第三方库:没那么多。

对于噪音深表歉意。

© www.soinside.com 2019 - 2024. All rights reserved.