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)
根据您的需要,您有两种解决方案.
投吧
考虑到它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则会引发异常.
| 归档时间: |
|
| 查看次数: |
3049 次 |
| 最近记录: |