zoukankan      html  css  js  c++  java
  • 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 *"将其打散,之前也学过了,如下:

  • 相关阅读:
    BOZJ 3551&BZOJ 3545 kruskal重构树
    [Poi2014]FarmCraft
    NOIP 2015 斗地主
    POJ 1704 Georgia and Bob
    BZOJ 1409 快速幂+欧拉定理
    最长公共子序列(LCS)
    神奇的口袋(百练2755)
    最长上升子序列(LIS)
    《Single Image Haze Removal Using Dark Channel Prior》去雾代码实现分析
    MATLAB中的nargin与varargin
  • 原文地址:https://www.cnblogs.com/webor2006/p/11537635.html
Copyright © 2011-2022 走看看