kotlin 和 Java的互操作
kotlin调用java代码
kotlin中关键字在java中进行转义
如果一个 Java 库使用了 Kotlin 关键字作为方法,你仍然可以通过反引号(`)字符转义它来调用该方法。
foo.is
(bar)
空安全 和 平台类型
java 中的任何引用都可能是 null,这使得 Kotlin 对来自 Java 的对象要求严格空安全是不现实的。 Java 声明的类型在 Kotlin 中会被特别对待并称为平台类型。对这种类型的空检查会放宽, 因此它们的安全保证与在 Java 中相同。
val list = ArrayList
当我们调用平台类型变量的方法时,Kotlin 不会在编译时报告可空性错误, 但在运行时调用可能会失败,因为空指针异常或者 Kotlin 生成的阻止空值传播的断言。
空安全是怎么做到的?
val nullable: String? = item // 允许,没有问题 val notNull: String = item // 允许,运行时可能失败
如果我们选择非空类型,编译器会在赋值时触发一个断言。这防止 Kotlin 的非空变量保存空值。当我们把平台值传递给期待非空值等的 Kotlin 函数时,也会触发断言。 总的来说,编译器尽力阻止空值通过程序向远传播。
getClass()
val fooClass = foo::class.java val fooClass = foo.javaClass
clone()
要覆盖 clone(),需要继承 kotlin.Cloneable:
class Example : Cloneable { override fun clone(): Any { …… } }
finalize()
要覆盖 finalize(),所有你需要做的就是简单地声明它,而不需要 override 关键字:
class C { protected fun finalize() { // 终止化逻辑 } }
Kotlin中使用JNI
要声明一个在本地(C 或 C++)代码中实现的函数,你需要使用 external 修饰符来标记它:
external fun foo(x: Int): Double