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 😉

  • ¿Cómo ocultar el button inferior cuando el keyboard está abierto en kotlin?
  • Propiedad no opcional con setter personalizado Kotlin
  • Deslizar no funciona en la segunda actividad
  • Fragmento: Cambiar la visibilidad en la function
  • La inferencia de tipo del comstackdor Kotlin no puede elegir qué método llamar (ambigüedad con types generics)
  • msg: ¿No se puede encontrar el getter para el atributo 'android: text' con el tipo de valor java.lang.String en el data binding?
  • Cómo implementar Memento Pattern en Kotlin
  • Memoración de la function miembro de la class de datos Kotlin
  • La igualdad de class Kotlin falla
  • ¿Cómo puedo hacer que IntelliJ refactor-> cambie el nombre del parámetro y cambie el nombre de la versión local del mismo? (Kotlin)
  • ¿Puedo extender, en Java, una class de delegación de Kotlin?