我正在 Kotlin 中迈出第一步,并尝试编写一个简单的字符串拆分函数。我从这个开始:
fun splitCSV(s : String) : Array<String> {
return s.split(",");
}
我想也可以这样写:
fun splitCSV(s : String) : Array<String> = s.split(",");
但是我收到类型错误,因为 s.split 返回 anArray<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
如果我将 T 更改forceNotNull
为 String,那么它可以工作,所以我想我已经接近解决方案了。
这是正确的方法吗?如果是,我该如何解决forceNotNull
在通用情况下的工作?