El tipo Out-Projected 'ArrayList <*>' prohíbe el uso de 'public fun fun add (índice: Int, elemento: E): Unidad definida en java.util.ArrayList'

Tengo estos fragments:

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<*> } ... ... ... 

entonces lo uso en esto:

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

pero obtengo este error:

 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' 

Las proyecciones en estrella de Kotlin no son equivalentes a los types brutos de Java. La estrella (*) en MutableList<*> significa que puede leer valores de la list de forma segura, pero no puede escribir valores de manera segura; los valores de la list son todos de un tipo desconocido que podría ser Person , String , Number? , o incluso Any? . es decir, es lo mismo que MutableList<out Any?> .

Por el contrario, MutableList<Any?> Significa que puede leer y escribir cualquier valor desde y hacia la list. Todos los valores pueden ser del mismo tipo (por ejemplo, Person ) pero pueden ser de types mixtos (por ejemplo, Person y String ).

En su caso, es posible que desee utilizar dataList: MutableList<Any> que significa que puede leer y escribir cualquier valor no nulo desde y hacia la list.

Así que tengo que lanzar a la persona como a continuación:

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

porque dataList es ArrayList <*> y no ArrayList y Kotlin es estricto en eso.

  • Obligatorio <Objeto> y encontrado <Objeto>?
  • Clases de Kotlin sin llaves
  • ¿Cómo crear un button en Kotlin que abre una nueva actividad (Android Studio)?
  • ¿Cómo funcionan las funciones de extensión de Kotlin?
  • Hacer clic en una vista de text para cambiar el fragment
  • Extensión sintética Kotlin para ver
  • Extensiones en Kotlin
  • En Kotlin Lenguaje de progtwigción importancia de varargs en términos de usos
  • Android Studio 3 no puede build fragments de kotlin
  • No se puede acceder a EditText u otros componentes de la interfaz de usuario con Kotlin