官方文檔: 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屬性
// kotlin編譯生成的Java代碼
private String firstName; // java私有字段
public String getFirstName() { // getter方法
return firstName;
}
public void setFirstName(String firstName) { // setter方法
this.firstName = firstName;
}
示例2:
// kotlin代碼
var isOpen: Boolean // Kotlin屬性
// kotlin編譯生成的Java代碼
private Boolean isOpen; // java私有字段
public Boolean isOpen() { // getter方法
return firstName;
}
public void setOpen(Boolean isOpen) {// setter方法
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)
如果kotlin屬性有幕后字段(backing field),且沒有private/open/override/const修飾符,且不是委托屬性;
可以用@JvmField注解標注kotlin屬性,使對應的Java字段與kotlin屬性可見性相同(默認public)!
// kotlin
class C(id: String) {
@JvmField val ID = id
}
// Java調用kotlin
class JavaClient {
public String getID(C c) {
return c.ID;
}
}
延遲初始化的屬性(lateinit修飾),其對應的Java字段的可見性與Kotlin屬性訪問器setter相同!
簡書:http://www.lxweimin.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