我正在学习 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更改为String,则可以正常工作,所以我想我离找到解决方案很近了。这是正确的方法吗?如果是的话,如何修复
forceNotNull
以使其在通用情况下起作用?
sureItemsNotNull
已经添加:http://youtrack.jetbrains.com/issue/KT-1391 - Stan Kurilin