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.

  • Por qué los numbers que aceptan nulos no son para preservar la identidad
  • OnClick y TextView en Android Studio 3
  • Clases de Kotlin sin llaves
  • Hacer clic en una vista de text para cambiar el fragment
  • Extensión sintética Kotlin para ver
  • Obligatorio <Objeto> y encontrado <Objeto>?
  • Clase Kotlin no encontrada
  • La biblioteca de Android no puede comstackr kotlin
  • Anulación accidental: las siguientes declaraciones tienen la misma firma de JVM
  • No se puede acceder a EditText u otros componentes de la interfaz de usuario con Kotlin