Kotlin Неразрешенная ссылка: удалить - PullRequest
1 голос
/ 10 октября 2019

Я пытаюсь изучить Kotlin, преобразовав свою реализацию Java в 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<*, *, *>>>()

1 Ответ

2 голосов
/ 10 октября 2019

Список, который вы пытаетесь редактировать, неизменен внутри карты. Сделайте его изменяемым:

private Map<String, MutableList<CustomAsyncTask<?,?,?>>> mActivityTaskMap;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...