【发布时间】:2018-08-21 06:38:19
【问题描述】:
我刚刚开始使用 Kotlin,现在必须弄清楚需要 varargs 类型为 String 的函数。有问题的代码如下:
val optionStrArr = arrayOfNulls<String>(options.size)
for (i in options.indices) {
optionStrArr[i] = options[i].value
}
App.instance?.analyticPollReceive(pollID!!, title!!, question!!, *optionStrArr)
...
fun analyticPollReceive(id: String, title: String, question: String, vararg options: String) {
// function body
}
这只是 Android Studio 的 Java-Kotlin 转换器从 Java 转换而来的部分代码。
错误在函数调用中,如果我删除扩展运算符,编译器会说:
Type mismatch. Required: String; Found: Array<String?>
但是,当我把扩展运算符放入时,编译器会说:
Type mismatch. Required: Array<out String>; Found: Array<String?>
我应该将可变参数类型更改为vararg options: String?吗?
【问题讨论】:
-
没有。你应该尽可能地避免空值。所以你的数组应该是字符串数组,而不是字符串?数组。
-
视情况而定,
options[i].value可以为空吗?如果不是,那么optionStrArr应该是Array<String>类型。否则需要将可变参数类型改为Array<String?>。 -
其实
options[i]本身就是一个Object,我只是把String?的值改成了String。但是当我将结果数组传递给 varargs 参数时,编译器仍然认为它是Array<String?>。虽然也许只是我需要删除原始 Java 文件。
标签: kotlin