在上一次https://www.cnblogs.com/webor2006/p/11530801.html中学习了Kotlin调用Java的使用方式及一些注意点,这次继续其这个场景进一步学习。
数组(Array):
下面先来看一下在Java中数组的情况:
但是!!如果这样写:
编译貌似没问题,但是!!在运行时看结果:
所以从这个示例子来看,有点协变的感觉,也就是Java对于数组的设计就是一个类型不安全的,但是!!!在Kotlin中的数组是不变的(相对于协变和逆变来说的),这一点与Java存在明显的不同。这就意味着,我们无法将一个Array<String>赋给Array<Any>,这样就可以防止可能出现的运行期异常。
在Kotlin中提供了原生类型数组来避免自动装箱与拆箱带来的成本:IntArray,DoubleArray,CharArray...
下面看代码,先来新建一个Java类:
然后在Kotlin中来调用一下它:
咱们来瞅一下它返回的是啥类型:
其中可以看一下IntArray的javadoc:
那我们知道构建数组还有其它方法,如:
那看下它的细节:
也就是:
其实也就是对应Java中的Integer[]类型。好,接下来我们来调用Java定义的方法,并传递参数:
当编译为JVM字节码时,编译器会优化对于数组的访问,使之不会产生额外的成本。下面再来看:
其实数组是有get和set方法,如下:
但是这段代码会优化,其实是不会调用它里面的get和set方法的,只会直接通过索引去访问:
可变参数:
先建一个Java类,支持可变参数:
接着在Kotlin中来调用一下它:
直接传是不行的:
此时就需要用到"spread operation *"将其打散,之前也学过了,如下: