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群,一起讨论学习:
欢迎关注 微信公号