Kotlin与Java通信

简介

Kotlin 是一个用于现代多平台应用的静态编程语言,由JetBrains公司开发。
Kotlin 在设计时就考虑了 Java 互操作性,因此 Kotlin 完全兼容 Java 代码;
但是在使用过程中还是有可能会出现一些小的问题。

Java调用Kotlin方法传入空对象

如果Kotlin文件声明的方法的参数列表为非空类型,在纯 Kotlin 代码的调用,编译器会帮你完成空检测。

1
2
3
4
5
6
7
8
9
10
11
12
13
// Hello.kt
class Foo {
companion object {
fun bar(name: String) {
print(name)
}
}
}

//Hello1.kt
fun main(args: Array<String>) {
Foo.bar(null) //编译不通过
}

但是当 Java 调用 Kotlin 时则不一样,编译器无法帮你识别 Java 传递的参数是否是非空类型。

1
2
3
4
//Hello2.java
public static void main(String[] args) {
Foo.Companion.bar(null);
}

以上代码在编译时不会出错,但运行时则会报如下错误。

java.lang.IllegalArgumentException: Parameter specified as non-null is null: method Foo$Companion.bar, parameter name

Kotlin 在声明供 Java 调用的方法时参数列表应该声明为可空类型。

1
2
3
4
// Hello.kt
fun bar(name: String?) {
print(name)
}