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) 
  • Escribir una interfaz Copyable más elegante que en Java
  • Configure Jackson para usar SNAKE_CASE "globalmente" en Spring Boot 2.0.0.M1
  • Constructor que toma el constructor plotble en la class derivada de kotlin
  • Bt Socket cerró la exception
  • Los generics de Kotlin esperan un tipo inesperado
  • ¿Plumando Kotlin para la finalización automática del eclipse?
  • Cómo crear una secuencia infinitamente larga en Kotlin
  • Cómo actualizar las classs de datos implementando una interfaz común
  • Faltan numbers de línea en playstore crashdumps
  • ¿Cuál es la syntax para Class <? extiende class_name> en kotlin?
  • Angular: cómo publicar un file en el server al enviar el formulario