Kotlin Cast String como String.Companion

Así que soy nuevo en el aprendizaje de Kotlin, proveniente de un entorno C #. He estado jugando con types y algunas otras cosas. Intento crear una class estática de "WalMartGreeters" que pueda agregar "greeters" a una list y luego llamar a una function estática simple para mostrarlos. Mi método toma un argumento de cadena / list de cadenas para agregar a la list de cadenas mutables, pero cuando bash agregarle valores. Aparece un error de compilation previa que dice "String.Companion esperado" "tengo Cadena" Intento cambiarlo para convertir el String como String.Companion y luego dice que el lanzamiento es ilegal.

El error pnetworkingominante que recibo es: Excepción en el hilo "principal" java.lang.ClassCastException: java.lang.String no se puede convertir en kotlin.jvm.internal.StringCompanionObject

fun main(args:Array<String>) { walMartGreeter.addTo("Jean") walMartGreeter.addTo("Dale") walMartGreeter.addTo("Phil") walMartGreeter.addTo("Chris") walMartGreeter.listTheWholeFam() } class walMartGreeter(val strName:String) { companion object classList { var prntList = mutableListOf(String) fun addTo(strNameToAdd:String) { prntList.add(strNameToAdd) } fun addTo(listOfNames:List<String>) { for (item in listOfNames) { prntList.add(item) } } fun listTheWholeFam() { //println("All I do is $strName") for(item in prntList) { println("Hello, $item!") } //println("type of mutList: ${mutList.ToString()}") if(prntList is MutableList) { println("Yeah, it's a mutableList"); } } } } 

En primer lugar, no se puede comstackr el código anterior en su pregunta, ya que prntList es una MutableList<String.Companion> lugar de una MutableList<String> . SI desea que prntList agregue prntList , necesita cambiar su tipo a MutableList<String> , por ejemplo:

 var prntList = mutableListOf<String>() 

En segundo lugar, la String en mutableListOf(String) es solo un calificador en lugar de una class. lo que significa que la String será una reference a una reference específica en su scope. en su caso, el calificador hará reference a su object acompañante .

Los miembros del object acompañante se pueden llamar utilizando simplemente el nombre de la class como calificador .

Por ejemplo:

 // v--- reference to its companion object val it:String.Companion = String 

Por otro lado, también puede hacer que el calificador haga reference a una variable de nivel superior, por ejemplo:

  val String = "" // v--- reference to the top-level variable var prntList = mutableListOf(String) // ^---is a `MutableList<String>` rather than `MutableList<String.Companion>` now 

Lo diferente entre mutableListOf<String>() y mutableListOf(String) como se muestra a continuación:

 // v--- it is a type argument of the `String` class mutableListOf<String>() // v--- it is a qualifier that reference to `String.Companion` mutableListOf(String) 
  • Android Studio 3.0 Proguard con kotlin y greendao devuelve ClassLookupException
  • ¿Podemos usar infix methods generics en Kotlin?
  • En la dependency injection Kodein, ¿cómo se puede inyectar instancias de Kodein en instancias?
  • Confusión de la syntax de Kotlin lambda
  • La interfaz de Java SAM creada a partir de Kotlin da ClassCastException
  • Intentando ejecutar el guión de Kotlin en IntelliJ IDEA
  • Dibujando líneas desde ViewModel TornadoFX
  • Kotlin: ¿Ya no es posible iterar un map con una input desestructurada? ¿Error?
  • Kotlin class de datos Gson problema de serialization
  • Error al procesar la anotación con Kapt y Dagger2
  • La function de la interfaz choca con el getter de Property