Out-projected type «ArrayList <*>» запрещает использование «public open fun add (index: Int, element: E): Unit, определенный в java.util.ArrayList '

У меня есть следующие фрагменты:

class RecyclerViewAdapter internal constructor( val clazz: Class<out RecyclerViewViewHolder>, val layout: Int, var dataList: MutableList<*>) ... ... ... fun RecyclerView.getDataList() : ArrayList<*> { return (adapter as RecyclerViewAdapter).dataList as ArrayList<*> } ... ... ... 

то я использую это:

 recyclerView.getDataList().add(Person("Lem Adane", "41 years old", 0)) 

но я получаю эту ошибку:

 Error:(19, 31) Out-projected type 'ArrayList<*>' prohibits the use of 'public open fun add(index: Int, element: E): Unit defined in java.util.ArrayList' 

Звездные проекции Котлина не эквивалентны исходным типам Java. Звезда (*) в MutableList<*> означает, что вы можете безопасно считывать значения из списка, но вы не можете безопасно записывать в него значения; значения списка – это все неизвестные типы, которые могут быть Person , String , Number? , или даже Any? , т.е. MutableList<out Any?> же, что и MutableList<out Any?> .

Напротив, MutableList<Any?> Означает, что вы можете читать и записывать любое значение из и в список. Все значения могут быть одного типа (например, Person ), но они могут быть смешанных типов (например, Person и String ).

В вашем случае вы можете использовать dataList: MutableList<Any> что означает, что вы можете читать и записывать любое ненулевое значение из и в список.

Поэтому я должен бросить человека, как показано ниже:

 val personList = (recyclerView.dataList as ArrayList<Person>) personList.add( 0, Person("Lem Adane", "41 years old", 0)) 

потому что dataList – это ArrayList <*>, а не ArrayList, и Kotlin строго придерживается этого.

Intereting Posts
В Котлине, как сделать свойство доступным только для определенного типа Parse String шаблон вместо файла в Pebble Template Engine Spring Boot ThymeLeaf и Kotlin – значение флажка не передается контроллеру? Kotlin: Почему я не могу выполнить задание в защитнике цикла? Как экспортировать функции Kotlin в Javascript с правильным именем Как я могу отменить оповещение после нажатия кнопки «Назад» Я хочу получить один результат из другого списка Почему Котлин не разрешает использовать какой-либо код в основном конструкторе? Отрицательное значение отрицательного модуля Kotlin Почему неразрешенная ссылка на попытку доступа к постоянным значениям? Спецификация <K, V> введите в `Pair <K, V>` Как создать вызванное время Уведомление, которое работает на всех устройствах Android Realm, инициализируя пустой массив строк, возвращает «Unsupported type java.lang.String » on build ext в buildscript не может быть распознан Gradle Kotlin DSL как избежать нулевой проверки