gpt4 book ai didi

kotlin - 将不可空字符串数组作为可空字符串数组传递

转载 作者:IT老高 更新时间:2023-10-28 13:38:11 27 4
gpt4 key购买 nike

我有一个接收 Array<String?> 的函数:

fun doStuff(words: Array<String?>) {
// ...
}

有什么方法可以传入 Array<String>到这个功能?原样编译器给了我一个“类型不匹配”的错误。

private val SOME_WORDS = arrayOf("I", "want", "to", "use", "these")

doStuff(SOME_WORDS) // throws a type-mismatch error

我最好避免制作 SOME_WORDS一个 arrayOf<String?>(...)如果可能的话。

最佳答案

使用 out -projected Array<out String?> :

fun doStuff(words: Array<out String?>) { /* ... */ }

Arrays in Kotlin are invariant , 表示 Array<A>Array<B>对于任何不同的 A 而言,它们都不是彼此的子类型和 B ,包括 StringString? ,并且它们不能被分配和作为参数传递。

使用 out -投影Array<out String?>使函数不仅接受 Array<String?>还有子类型为 String? 的数组.基本上,因为类型是 final ,只有一个这样的子类型,它是 String (非空的,没有 ? )。

type variance diagram

图片来自:A Whirlwind Tour of the Kotlin Type Hierarchy )

因此,该函数将接受 Arrray<String>也是。但是您将无法将可为空的值放入数组中(这就是投影的工作方式),因此类型安全(和空安全)得以保留。

关于kotlin - 将不可空字符串数组作为可空字符串数组传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45866466/

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