在kotlin中,如何传回目的地期望List的MutableList

lan*_*nyf 5 inheritance android list kotlin

使用带有List作为值定义的hashMap:

     private var mMap: HashMap<String, List<DataStatus>>? = null
Run Code Online (Sandbox Code Playgroud)

有一个函数返回一个hashMap但具有MutableList的值

     fun getDataStatus(response: JSONObject?): HashMap<String, MutableList<DataStatus>> {

          return HashMap<String, MutableList<AccountStatusAlert>>()
     }
Run Code Online (Sandbox Code Playgroud)

当将结果传递给期望List的hashMap时,它得到了错误:

     mMap = getDataStatus(resp) //<== got error
Run Code Online (Sandbox Code Playgroud)

得到错误:

Error:(81, 35) Type mismatch: inferred type is HashMap<String, 
MutableList<DataStatus>> but HashMap<String, List<DataStatus>>? was expected
Run Code Online (Sandbox Code Playgroud)

Gio*_*oli 6

根据您的需要,您有两种解决方案.

投吧

考虑到它MutableList是一个子类List,你可以投射它.这里只有一个问题:你将失去不变性.如果将List背面强制转换为MutableList,则可以修改其内容.

mMap = getDataStatus(repo) as HashMap<String, List<String>>
Run Code Online (Sandbox Code Playgroud)

转换它

为了保持列表的不变性,您必须将每个转换MutableList为不可变的List:

mMap = HashMap<String, List<String>>()
getDataStatus(repo).forEach { (s, list) ->
    mMap?.put(s, list.toList())
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果您尝试修改内部列表的内容,mMap则会引发异常.