美文网首页kotlin频道Kotlin开发知识Kotlin
Kotlin最简单的入门教程——与Java互相调用

Kotlin最简单的入门教程——与Java互相调用

作者: next_discover | 来源:发表于2017-06-12 14:42 被阅读308次

    Kotlin最简单的入门教程——环境
    Kotlin最简单的入门教程——基础类型(一)
    Kotlin最简单的入门教程——基础类型(二)
    Kotlin最简单的入门教程——类和继承
    Kotlin最简单的入门教程——可见性修饰符,扩展,数据类,密封类
    Kotlin最简单的入门教程——委托
    Kotlin最简单的入门教程——神秘的Lambda
    Kotlin最简单的入门教程——集合
    Kotlin最简单的入门教程——关键字,操作符,异常,空指针
    Kotlin最简单的入门教程——与Java互相调用

    Kotlin 中调用 Java 代码
    import java.util.*
    
    fun demo(source: List<Int>) {
        val list = ArrayList<Int>()
        // “for”-循环用于 Java 集合:
        for (item in source) {
            list.add(item)
        }
        // 操作符约定同样有效:
        for (i in 0..source.size() - 1) {
            list[i] = source[i] // 调用 get 和 set
        }
    }
    
    Java 中调用 Kotlin
    // example.kt
    package demo
    
    class Foo
    
    fun bar() {
    }
    
    
    // Java
    new demo.Foo();
    demo.ExampleKt.bar();
    

    静态方法

    class C {
        companion object {
            @JvmStatic fun foo() {}
            fun bar() {}
        }
    }
    
    //现在,foo() 在 Java 中是静态的,而 bar() 不是:
    
    C.foo(); // 没问题
    C.bar(); // 错误:不是一个静态方法
    C.Companion.foo(); // 保留实例方法
    C.Companion.bar(); // 唯一的工作方式
    
    可变参数传递
    Java 类有时声明一个具有可变数量参数(varargs)的方法来使用索引。
    
    public class JavaArrayExample {
    
        public void removeIndices(int... indices) {
            // 在此编码……
        }
    }
    在这种情况下,你需要使用展开运算符 * 来传递 IntArray:
    
    val javaObj = JavaArray()
    val array = intArrayOf(0, 1, 2, 3)
    javaObj.removeIndicesVarArg(*array)
    目前无法传递 null 给一个声明为可变参数的方法。
    
    Java 反射
    Java 反射适用于 Kotlin 类,反之亦然。
    如上所述,你可以使用 instance::class.java, ClassName::class.java 或者 instance.javaClass 通过 java.lang.Class 来进入 Java 反射。
    
    其他支持的情况包括为一个 Kotlin 属性获取一个 Java 的 getter/setter 方法或者幕后字段、
    为一个 Java 字段获取一个 KProperty、为一个 KFunction 获取一个 Java 方法或者构造函数,反之亦然
    
    已映射类型
    Java 类型 Kotlin 类型
    byte kotlin.Byte
    short kotlin.Short
    int kotlin.Int
    long kotlin.Long
    char kotlin.Char
    float kotlin.Float
    double kotlin.Double
    boolean kotlin.Boolean
    一些非原生的内置类型也会作映射:
    Java 类型 Kotlin 类型
    java.lang.Object kotlin.Any!
    java.lang.Cloneable kotlin.Cloneable!
    java.lang.Comparable kotlin.Comparable!
    java.lang.Enum kotlin.Enum!
    java.lang.Annotation kotlin.Annotation!
    java.lang.Deprecated kotlin.Deprecated!
    java.lang.CharSequence kotlin.CharSequence!
    java.lang.String kotlin.String!
    java.lang.Number kotlin.Number!
    java.lang.Throwable kotlin.Throwable!
    Java 的装箱原始类型映射到可空的 Kotlin 类型:
    Java type Kotlin type
    java.lang.Byte kotlin.Byte?
    java.lang.Short kotlin.Short?
    java.lang.Integer kotlin.Int?
    java.lang.Long kotlin.Long?
    java.lang.Character kotlin.Char?
    java.lang.Float kotlin.Float?
    java.lang.Double kotlin.Double?
    java.lang.Boolean kotlin.Boolean?

    请注意,用作类型参数的装箱原始类型映射到平台类型: 例如,List<java.lang.Integer> 在 Kotlin 中会成为 List<Int!>。

    集合类型在 Kotlin 中可以是只读的或可变的,因此 Java 集合类型作如下映射: (下表中的所有 Kotlin 类型都驻留在 kotlin.collections包中):

    Java 类型 Kotlin 只读类型 Kotlin 可变类型 加载的平台类型
    Iterator<T> Iterator<T> MutableIterator<T> (Mutable)Iterator<T>!
    Iterable<T> Iterable<T> MutableIterable<T> (Mutable)Iterable<T>!
    Collection<T> Collection<T> MutableCollection<T> (Mutable)Collection<T>!
    Set<T> Set<T> MutableSet<T> (Mutable)Set<T>!
    List<T> List<T> MutableList<T> (Mutable)List<T>!
    ListIterator<T> ListIterator<T> MutableListIterator<T> (Mutable)ListIterator<T>!
    Map<K, V> Map<K, V> MutableMap<K, V> (Mutable)Map<K, V>!
    Map.Entry<K, V> Map.Entry<K, V> MutableMap.MutableEntry<K,V> (Mutable)Map.(Mutable)Entry<K, V>!

    Java 的数组按下文所述映射:

    Java 类型 Kotlin 类型
    int[] kotlin.IntArray!
    String[] kotlin.Array<(out) String>!

    <br /><br />

    最后欢迎加入Kotlin QQ群,一起讨论学习:

    Paste_Image.png

    欢迎关注 微信公号

    android频道

    相关文章

      网友评论

        本文标题:Kotlin最简单的入门教程——与Java互相调用

        本文链接:https://www.haomeiwen.com/subject/fgslqxtx.html