Kotlin调用Java程序重点分析

在上一次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 *"将其打散,之前也学过了,如下:

原文地址:https://www.cnblogs.com/webor2006/p/11537635.html