关于参数泛型的问题
来源:12-8 本章小结
慕妹6901783
2018-08-12
fun generateRandomArray(n: Int, rangeL: Int, rangeR: Int): Array<Int?> {
assert(rangeL <= rangeR)
val arr = arrayOfNulls<Int>(n)
for (i in 0 until n) {
arr[i] = (Math.random() * (rangeR - rangeL + 1) + rangeL).toInt()
}
return arr
}
// 打印arr数组的所有内容
fun printArray(arr: Array<Any?>) {
for (i in arr.indices) {
print(arr[i])
print(' ')
}
println()
return
}我printArray接受的参数类型的泛型是Array<Any?>,在java里面Array<Int?>子类型是能传递进去的
但是编辑器报错是什么原因
写回答
2回答
-
bennyhuo
2018-08-13
型变的问题。印象中kotlin的数组不是协变的,java的是。
所以Array<Any?>和Array<Int?>是没有任何继承关系的。
但 Java 的 Integer[] 和 Number[] 是有继承关系的。这里面其实有一些比较取巧的地方,因为 Kotlin 在 jvm 上面其实也会把数组映射成 Java 的类型。
022018-08-16 -
慕妹6901783
提问者
2018-08-12
fun printArray(arr: Array<*>) { arr.forEach { print(it) print(" ") println() } return }我换成*类型以后就可以传递进去,不太清楚在这个参数传递时候kotlin和java的区别
00
相似问题