官方文檔: http://kotlinlang.org/docs/reference/java-to-kotlin-interop.html
1.kotlin屬性(Properties)
Kotlin屬性會被編譯成以下Java元素:
1.getter方法,名稱是在kotlin屬性名前加get並且屬性名首字母大寫;
2.setter方法(只適用於var屬性),名稱是在kotlin屬性名前加set並且屬性名首字母大寫;
3.private私有字段,名稱與kotlin屬性同名(只適用於具有幕後字段[backing field]的屬性)
如果kotlin屬性名以is開頭,則java名稱映射規則不同: getter名與屬性名相同,setter名是將is替換爲set;
提示: 這一規則適用於任何類型的屬性,不僅限於Boolean
示例1:
// kotlin代碼:
var firstName: String // Kotlin屬性
// 對應的Java代碼:
// java私有字段
private String firstName;
// getter方法
public String getFirstName() {
return firstName;
}
// setter方法
public void setFirstName(String firstName) {
this.firstName = firstName;
}
示例2:
// kotlin代碼:
var isOpen: Boolean // Kotlin屬性
// 對應的Java代碼:
private Boolean isOpen; // java私有字段
// getter方法
public Boolean isOpen() {
return firstName;
}
// setter方法
public void setOpen(Boolean isOpen) {
this.isOpen = isOpen;
}
2.kotlin包級函數(Package-Level Functions)
1.在demo包內的example.kt文件中聲明的所有函數和屬性(包括擴展函數),
都被編譯成一個名爲demo.ExampleKt的Java類的靜態方法:
// kotlin代碼(example.kt文件)
package demo
class Foo
fun bar() {
}
// Java調用kotlin
new demo.Foo();
demo.ExampleKt.bar(); // 把example.kt大寫變成ExampleKt類
2.可以使用@JvmName註解修改生成的Java類名:
// kotlin代碼(example.kt文件)
@file:JvmName("DemoUtils")
package demo
class Foo
fun bar() {
}
// Java調用kotlin
new demo.Foo();
demo.DemoUtils.bar();
3.如果多個不同文件的包名相同且@JvmName註解相同,可用@JvmMultifileClass註解,編譯器能夠生成一個單一Java外觀類
// kotlin代碼(oldutils.kt文件)
@file:JvmName("Utils")
@file:JvmMultifileClass
package demo
fun foo() {
}
// kotlin代碼(newutils.kt文件)
@file:JvmName("Utils")
@file:JvmMultifileClass
package demo
fun bar() {
}
// Java調用kotlin
demo.Utils.foo();
demo.Utils.bar();
3.實例對象字段(Instance Field)
在Java中將Kotlin屬性作爲字段暴露,需要用@JvmField註解標註,該字段的可見性與底層屬性相同;
如果kotlin屬性有幕後字段(backing field),且沒有private/open/override/const修飾符,且不是委託屬性;
那麼可以用@JvmField註解該kotlin屬性!
// kotlin
class C(id: String) {
@JvmField val ID = id
}
// Java
class JavaClient {
public String getID(C c) {
return c.ID;
}
}
延遲初始化(Late-Initialized)屬性在Java中也會暴露爲字段,該字段的可見性與lateinit屬性setter相同!
簡書:http://www.jianshu.com/p/1cf85aa9fcfc
CSDN博客: http://blog.csdn.net/qq_32115439/article/details/75268938
GitHub博客:http://lioil.win/2017/07/17/Kotlin-kotlinInJava.html
Coding博客:http://c.lioil.win/2017/07/17/Kotlin-kotlinInJava.html