如何转换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!! } }
但这不是问题;-)