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
Есть ли удобный способ создания Parcelable классов данных в Android с Kotlin? Что означает этот код «DetailActivity.ID to it.id»? Неразрешенные ссылки на стандартные элементы библиотеки Kotlin (JVM) Авторизация Spotify Code отклоняется за плохие учетные данные, несмотря на то, что отправлен действительный токен java.util.logging.Logger в тестируемом классе Почему в контексте нет основного атрибута цвета активности? rxAndroidBle получить длинный ответ записи kotlin отборочный аннотации игнорируется Как я могу вызвать методы Kotlin с помощью reified generics из Java? Проблемы с попыткой создания приложения Kotlin с Android Studio В Kotlin, как я идиоматически обращаюсь к значениям вложенной карты с нулевым значением или возвращать значение по умолчанию? Синтаксис Котлина 'it' в контексте Volley Использование в Generics в Multibinder Gson не может десериализовать общий тип ArrayList, используя TypeToken Можно ли сопоставить функцию более высокого порядка в котлине с строкой