如何转换Array <T?>? 到Kotlin的Array <T>中

我正在考虑Kotlin的第一步,并试图编写一个简单的字符串拆分函数。 我从这开始:

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

我猜也可以这样写:

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

但是我得到一个类型错误,因为s.split返回一个Array<String?>? 而不是Array<String> 。 我找不到一个简单的方法来执行转换,所以我编写了这个函数来完成转换:

 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(",")); 

但是,现在我得到一个运行时错误:

ClassCastException:[Ljava.lang.Object; 不能转换为[Ljava.lang.String

如果我将forceNotNull T forceNotNull为String,那么它可以工作,所以我想我接近于一个解决方案。

这是正确的方式去呢? 如果是这样,我怎样才能修复forceNotNull工作在一般情况下?

不知道这是最好的方法,但这似乎工作:

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

虽然IntelliJ突出显示as?“这个演员永远不能成功” …所以我最初的乐观情绪正在消失

奇怪的是,它似乎工作…

如下所示:

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

但是,同样的警告…我感到困惑,所以我现在就停下来: – /

编辑

当然,你可以使它与List<String>一起工作:

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

但这不是问题;-)