Получение неподдерживаемого исключения при попытке AddAll в MutableList - PullRequest
0 голосов
/ 05 июня 2018
Android Studio 3.2
kotlin_version 1.2.41 

Я получаю список непостоянных переменных UnsupportedOperationException addAll.

Я передаю MutableList, поэтому не уверен, почему я получу это исключение времени выполнения.

Когда я печатаю именаклассы Я получаю следующие классы коллекции

I/System.out: class java.util.ArrayList
I/System.out: class java.util.Collections$EmptyList

Это метод mapper, который возвращает MutableList

override fun map(cursor: Cursor): MutableList<InsectDataModel> {
        val insectDataModelList: MutableList<InsectDataModel> = mutableListOf()

        cursor.moveToFirst()
        while(cursor.moveToNext()) {
            InsectDataModel().let {
                it.friendlyName = cursor.getString(cursor.getColumnIndexOrThrow(InsectContract.COLUMN_FRIENDLY_NAME))
                it.scientificName = cursor.getString(cursor.getColumnIndexOrThrow(InsectContract.COLUMN_SCIENTIFIC_NAME))
                it.dangerLevel = cursor.getInt(cursor.getColumnIndexOrThrow(InsectContract.COLUMN_DANGER_LEVEL))

                insectDataModelList.add(it)
            }
        }

        cursor.close()
        return insectDataModelList
    }

Класс адаптера, который будет загружать список, используя addAll

class InsectAdapter(private var insectList: MutableList<InsectDataModel>): RecyclerView.Adapter<InsectAdapter.CustomInsectHolder>() {
    fun loadInsects(insectList: MutableList<InsectDataModel>) {
        println(insectList.javaClass)
        println(this.insectList.javaClass)

        this.insectList.addAll(insectList) /* Unsupported Exception here */

        notifyDataSetChanged()
    }
}

Вызов насекомого Адаптер

public void loadAllInsects(final Cursor cursor) {
    insectInteractorMapper = new InsectInteractorMapperImp();
    insectAdapter.loadInsects(insectInteractorMapper.map(cursor));
}

1 Ответ

0 голосов
/ 06 июня 2018

Вы не показали, как инициализировать InsectAdapter, но похоже, что вы делаете это из кода Java с new InsectAdapter(Collections.emptyList()).

Эта проблема заключается в том, что Java не имеет изменяемых и неизменяемых коллекций.так же, как Котлин.

Для кода Kotlin ваш конструктор класса выглядит следующим образом:

class InsectAdapter(private var insectList: MutableList<InsectDataModel>) 

Но для Java его подпись:

InsectAdapter(@NotNull List<Integer> insectList) {..}

Так что ничто не защищает вас от передачи неправильного типа коллекциинеизменяемый и изменяемый - от кода Java до кода Kotlin.И это именно то, что здесь происходит.

Вы (вероятно) передаете emptyList(), который, как документы говорит:

Возвращает пустой список ( неизменный ).

И когда вы пытаетесь что-то добавить к нему, выдается исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...