Kotlin 中调用 Java 代码
import java.util.*
fun demo(source: List<Int>) {
val list = ArrayList<Int>()
for (item in source) {
list.add(item)
}
for (i in 0. .source.size() - 1 ) {
list[i] = source[i]
}
}
Java 中调用 Kotlin
package demo
class Foo
fun bar() {
}
new demo.Foo();
demo.ExampleKt.bar();
静态方法
class C {
companion object {
@JvmStatic fun foo() {}
fun 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群,一起讨论学习:
欢迎关注 微信公号