我有一个接收Array<String?>的函数
fun doStuff(words: Array<String?>) {
// ...
}有什么方法可以将Array<String>传递给这个函数吗?因为- is编译器给了我一个“类型错配”错误。
private val SOME_WORDS = arrayOf("I", "want", "to", "use", "these")
doStuff(SOME_WORDS) // throws a type-mismatch error如果可能的话,我最好避免让SOME_WORDS成为arrayOf<String?>(...)。
发布于 2017-08-24 16:30:56
问题是这里的方差。String是它的可空朋友String?的一个子类型,但是在Kotlin中,这并不意味着Array<String>是Array<String?>的一个子类型,因为数组是不变的。(在Java中,情况并非如此,默认情况下,数组是协变的)
如果像您这样的函数需要Array<String?>类型的参数,那么只能传递Array<String?>,因此Array<String>是不可能的!如果要启用方法也处理这些数组,请执行以下操作:
fun doStuff(words: Array<out String?>) {
// ...
}这使得数组words、、协变和Array<String?>的子类型被允许传递。
请注意,只有像get()这样的函数才能访问这样的“外投影”数组。参数words据说是生产者 of String?。
如果您想了解更多关于它的信息,请查看官方的文档 :)
发布于 2017-08-24 16:19:42
https://stackoverflow.com/questions/45866466
复制相似问题