Kotlin:复制地图时不保留 withDefault

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

在地图上使用

.withDefault
时,我可以设置一个默认值,以便在给定的键不在地图上时使用
.getValue

当我复制该地图时,问题就出现了。我之前设置的默认值不会保留。

为什么在进行复制时未保留默认值的环绕?这是预期的行为吗?这里有我遗漏的东西吗?

我做了这个最小的可重现示例来说明问题:

@Test
fun `withDefault not preserved when copying a map`() {
    val map = mapOf<Int, Int>().withDefault { 0 }
    assertEquals(map.getValue(1), 0)

    val mapCopy = map.toMap()
    assertThrows<NoSuchElementException> { mapCopy.getValue(1) }
}
kotlin collections
1个回答
0
投票

文档中所述

返回此只读映射的包装器,具有由指定函数defaultValue提供的隐式默认值。

因此该操作不是更改数据本身,而是拦截用于检索值的调用,并在不存在时返回默认值。

toMap
复制底层地图而不是包装器。

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