Kotlin未解决的引用:removeAt

3

我尝试通过将我的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<*, *, *>>>()

2
除非.indices在一个数组中而不是一个列表中,否则作为mutablelist应该是可以的。https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-mutable-list/remove-at.html - coroutineDispatcher
1个回答

3

您正在尝试编辑的列表在地图中是不可变的。使其可变:

private Map<String, MutableList<CustomAsyncTask<?,?,?>>> mActivityTaskMap;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接