从Map :: getOrElse返回的Kotlin mutableList()不公开add()

use*_*119 1 kotlin

我有

data class Person(var name: String, var hobbies: List<String>)

val people = mutableListOf(
        Person("joe", asList("biking", "baking")),
        Person("jane", asList("baking")),
        Person("jack", asList("painting"))
)
val map = mutableMapOf<String, List<String>>()

for ((name, hobbies) in people) {

    for (hobby in hobbies) {

        var peopleWithThisHobby = map.getOrElse(hobby, { mutableListOf() })
        peopleWithThisHobby.plus(name)
        map[hobby] = peopleWithThisHobby
    }
}

println(map)
Run Code Online (Sandbox Code Playgroud)

在线peopleWithThisHobby.plus(name),IntelliJ auto complete没有给我这个add()方法.

我不得不使用:

var peopleWithThisHobby = map.getOrElse(hobby, { mutableListOf() })
peopleWithThisHobby = peopleWithThisHobby.plus(name)
map[hobby] = peopleWithThisHobby
Run Code Online (Sandbox Code Playgroud)

是什么赋予了?这是设计的吗?mutableList()getOrElse通话中返回的内容发生了什么变化?

我正在使用Kotlin插件版本:1.1.3-eap-85-IJ2017.2-1

Mib*_*bac 6

那是因为你的地图定义有一个List而不是MutableList值.改变它MutableList,它会工作.

val map = mutableMapOf<String, List<String>>()
Run Code Online (Sandbox Code Playgroud)

将以上内容更改为:

val map = mutableMapOf<String, MutableList<String>>()
Run Code Online (Sandbox Code Playgroud)