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

我有

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) 

在线peopleWithThisHobby.plus(name) ,IntelliJ自动完成不给我的add()方法。

我不得不使用:

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

是什么赋予了? 这是由设计? 从getOrElse调用中返回的mutableList()发生了什么?

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

那是因为你的地图定义有一个List而不是MutableList作为值。 将其更改为MutableList ,它将工作。

 val map = mutableMapOf<String, List<String>>() 

将上面的内容更改为:

 val map = mutableMapOf<String, MutableList<String>>()