Cómo convertir Array <T?>? en Array <T> en Kotlin

Estoy dando mis primeros pasos en Kotlin, y estoy tratando de escribir una simple function de split de strings. Empecé con esto:

fun splitCSV(s : String) : Array<String> { return s.split(","); } 

Lo cual creo que también se puede escribir así:

 fun splitCSV(s : String) : Array<String> = s.split(","); 

Pero obtengo un error de tipo, ya que s.split devuelve un Array<String?>? y no Array<String> . No pude encontrar una forma simple de hacer un reparto, así que escribí esta function para hacer la conversión:

 fun forceNotNull<T>(a : Array<T?>?) : Array<T> { return Array<T>(a!!.size, { i -> a!![i]!! }); } fun splitCSV(s : String) : Array<String> = forceNotNull(s.split(",")); 

Sin embargo, ahora obtengo un error de time de ejecución:

ClassCastException: [Ljava.lang.Object; no se puede convertir a [Ljava.lang.String

Si cambio T en forceNotNull a String, entonces funciona, así que supongo que estoy cerca de una solución.

¿Es esta la manera correcta de hacerlo? Y si lo es, ¿cómo puedo solucionar el problema de forceNotNull en el caso genérico?

No estoy seguro de que sea el mejor método, pero parece que funciona:

 fun splitCSV(s : String) : Array<String> { return ( s.split(",") as? Array<String>? ).sure() ; } 

Aunque IntelliJ destaca el as? con "Este elenco no puede tener éxito" … Así que mi optimismo inicial se está desvaneciendo

Curiosamente, parece que funciona …

Al igual que:

 fun splitCSV(s : String) : Array<String> { return s.split(",").sure() as Array<String> ; } 

Pero con la misma advertencia … me estoy confundiendo, así que me detendré ahora: – /

Editar

Por supuesto, puede hacer que funcione con List<String> :

 import java.util.List fun splitCSV(s : String) : List<String> { return s.split(",")!!.map<String?,String> { it!! } } 

pero esa no era la pregunta 😉

  • socket de server que escucha en el cliente frente al service de votación para la aplicación de postría instantánea de Android
  • ¿Es posible tener extensiones de function en lambdas?
  • ¿Es posible ejecutar el complemento de grado kotlin usando jdk 7?
  • ¿Problema de Android en la selección y deselección de elementos en un adaptador kotlin?
  • ¿Cuál es la mejor manera en kotlin para que el método toString () de un object nulo devuelva una cadena vacía en lugar de "nulo"?
  • Kotlin detecta el time de espera a petición del server
  • Componente (no codificado) no puede hacer reference a enlaces delimitados
  • BLE no puede conectarse a un dispositivo ya enlazado
  • ¿Es un val de instancia más costoso que el object compañero val?
  • Kotlin + Spring AliasFor
  • Revisión de código La mejor manera de uso ShanetworkingPreferences solving MemoryLeak