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

来源:互联网 发布:x战警天启知乎 编辑:程序博客网 时间:2024/06/08 14:21
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.ktpackage democlass Foofun bar() {}// Javanew 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

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

Paste_Image.png

欢迎关注 微信公号

android频道

阅读全文
0 0
原创粉丝点击