入参失败,是kotlin的一个bug吗


#1


#2

类型明显不一致


#3


#4

显然不是bug。本质上是因为Array也是Any的子类。


#5

大家可能没搞懂楼主想问什么。楼主想问的为什么这样可以:

val values = arrayOf<Array<Any>>()
test(values.map { it }.toTypedArray())

这样却不可以:

val values = arrayOf<Array<Any>>()
val p1 = values.map { it }.toTypedArray()
test(p1)

#6

其实下面这种你加一下类型标注也是可以的:

val values = arrayOf<Array<Any>>()
val p1: Array<Any> = values.map { it }.toTypedArray()
test(p1)

#7

Array 虽然是 Any 的子类,但是 Array<Array>,并不是 Array 的子类,因为 Array 在 Kotlin 里面并不是协变的,这个如果能理解的话,就知道为什么不能直接这样赋值了

楼主的问题其实在 toTypedArray 这里,这个函数会推断出一个类型,如果你没指定类型,它会推断成 Array<Array>,所以不能穿进去,如果你手动把类型指定为 Array,就可以了


#8

谢谢解答,上述代码将array改为list其实是没有任何问题的,所以不明白为啥array不行


#9

@bennyhuo 论坛 bug?尖括号 Any 在编辑框里和发出来不一样。。。


#10

md语法。Array<Any>

加撇号就好了


京ICP备16022265号-2 Kotlin China 2017 - 2018