我尝试通过将我的Java实现转换为Kotlin来学习Kotlin。
目前,我卡在了以下来自Kotlin的错误消息“未解决的引用:removeAt”。
以下是我的Kotlin代码:
private val mActivityTaskMap = mutableMapOf<String, List<CustomAsyncTask<*, *, *>>>()
fun removeTask(task: CustomAsyncTask<*, *, *>) {
for ((key, tasks) in mActivityTaskMap) {
for (i in tasks.indices) {
if (tasks[i] === task) {
tasks.removeAt(i) // <==== ERROR
break
}
}
if (tasks.size == 0) {
mActivityTaskMap.remove(key)
return
}
}
}
以下是原始的Java实现:
private Map<String, List<CustomAsyncTask<?,?,?>>> mActivityTaskMap;
public void removeTask(CustomAsyncTask<?,?,?> task) {
for (Map.Entry<String, List<CustomAsyncTask<?,?,?>>> entry : mActivityTaskMap.entrySet()) {
List<CustomAsyncTask<?,?,?>> tasks = entry.getValue();
for (int i = 0; i < tasks.size(); i++) {
if (tasks.get(i) == task) {
tasks.remove(i);
break;
}
}
if (tasks.size() == 0) {
mActivityTaskMap.remove(entry.getKey());
return;
}
}
}
我如何删除特定的任务? 我必须将声明更改为:
private val mActivityTaskMap = mutableMapOf<String, MutableList<CustomAsyncTask<*, *, *>>>()
.indices
在一个数组中而不是一个列表中,否则作为mutablelist
应该是可以的。https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-mutable-list/remove-at.html - coroutineDispatcher