Java 可以轻松调用 Kotlin 代码。
属性
Kotlin 属性会编译成以下 Java 元素:
一个 getter 方法,名称通过加前缀 get 算出;
一个 setter 方法,名称通过加前缀 set 算出(只适用于 var 属性);
一个私有字段,与属性名称相同(仅适用于具有幕后字段的属性)。
例如, var firstName: String 编译成以下 Java 声明:
private String firstName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
如果属性的名称以 is 开头,则使用不同的名称映射规则:getter 的名称与属性名称相同,并且 setter 的名称是通过将 is 替换为 set 获得。 例如,对于属性 isOpen ,其 getter 会称做 isOpen() ,而其 setter 会称做 setOpen() 。 这一规则适用于任何类型的属性,并不仅限于 Boolean 。
包级函数
在 org.foo.bar 包内的 example.kt 文件中声明的所有的函数和属性,包括扩展函数, 都编译成一个名为 org.foo.bar.ExampleKt 的 Java 类的静态方法。
// example.kt
package demo
class Foo
fun bar() {
}
// Java
new demo.Foo();
demo.ExampleKt.bar();
可以使用 @JvmName 注解修改生成的 Java 类的类名:
@file:JvmName("DemoUtils")
package demo
class Foo
fun bar() {
}
// Java
new demo.Foo();
demo.DemoUtils.bar();
如果多个文件中生成了相同的 Java 类名(包名相同并且类名相同或者有相同的 @JvmName 注解)通常是错误的。然而,编译器能够生成一个单一的 Java 外观类,它具有指定的名称且包含来自所有文件中具有该名称的所有声明。 要启用生成这样的外观,请在所有相关文件中使用 @JvmMultifileClass 注解。