gpt4 book ai didi

generics - 如何转换 Array?进入 Kotlin 中的 Array

转载 作者:行者123 更新时间:2023-12-02 04:02:08 28 4
gpt4 key购买 nike

我正在 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; cannot be cast to [Ljava.lang.String



如果我在 forceNotNull 中更改 T到字符串,然后它就可以工作了,所以我想我已经接近解决方案了。

这是正确的方法吗?如果是,我该如何修复 forceNotNull在一般情况下工作?

最佳答案

不确定这是最好的方法,但这似乎有效:

fun splitCSV(s : String) : Array<String> {
return ( s.split(",") as? Array<String>? ).sure() ;
}
尽管 IntelliJ 突出显示了 as? “这个 Actor 永远不会成功”......所以我最初的乐观正在消退
奇怪的是,它似乎有效......
就像:
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!! }
}
但这不是问题;-)

关于generics - 如何转换 Array<T?>?进入 Kotlin 中的 Array<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9992222/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com