在Kotlin中,可变Map分配需要TypeVariable(V)。无法将来自Map的值放入其本身。

5
以下示例是我在应用程序中尝试做的简化版本。
fun main() {
    val test: MutableMap<Int, String> = mutableMapOf(
        1 to "Apple",
    )
    test[2] = test[1]  // test[1] has incorrect type.
}

代码无法编译。IntelliJ 给出以下提示:
Type mismatch.

    Required:   TypeVariable(V)

    Found:      String?

我不理解TypeVariable是什么,但当我提供默认值时,错误消失了。

test[2] = test[1] ?: "Grape"

为什么所需类型是而不是,它到底是什么?如果我的应用程序没有默认值怎么办?

你明白为什么 test[1] ?: "Grape" 起作用,但就是不理解错误信息,对吧?编译器试图为 这个 set 方法 推断 V 类型参数。请参考这个非常相似的问题 这里,关于错误地访问映射。 - Sweeper
1个回答

5
... = test[1]

提示显示它返回一个String?。但是test是一个键为<Int,String>的MutableMap,这意味着您需要指定一个字符串:

... = test[1]!!

当然,这只有在1是test中有效的键时才起作用。否则,你的代码使用空安全运算符是可行的方法:
... = test[1] ?: "default value"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接