关于参数泛型的问题
来源: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
相似问题