官方文檔: http://kotlinlang.org/docs/reference/java-to-kotlin-interop.html
1.kotlin屬性(Properties)
Kotlin屬性會(huì)被編譯成以下Java元素:
1.getter方法,名稱(chēng)是在kotlin屬性名前加get并且屬性名首字母大寫(xiě);
2.setter方法(只適用于var屬性),名稱(chēng)是在kotlin屬性名前加set并且屬性名首字母大寫(xiě);
3.private私有字段,名稱(chēng)與kotlin屬性同名(只適用于具有幕后字段[backing field]的屬性)
如果kotlin屬性名以is開(kāi)頭,則java名稱(chēng)映射規(guī)則不同: getter名與屬性名相同,setter名是將is替換為set;
提示: 這一規(guī)則適用于任何類(lèi)型的屬性,不僅限于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包級(jí)函數(shù)(Package-Level Functions)
1.在demo包內(nèi)的example.kt文件中聲明的所有函數(shù)和屬性(包括擴(kuò)展函數(shù)),
都被編譯成一個(gè)名為demo.ExampleKt的Java類(lèi)的靜態(tài)方法:
// kotlin代碼(example.kt文件)
package demo
class Foo
fun bar() {
}
// Java調(diào)用kotlin
new demo.Foo();
demo.ExampleKt.bar(); // 把example.kt大寫(xiě)變成ExampleKt類(lèi)
2.可以使用@JvmName注解修改生成的Java類(lèi)名:
// kotlin代碼(example.kt文件)
@file:JvmName("DemoUtils")
package demo
class Foo
fun bar() {
}
// Java調(diào)用kotlin
new demo.Foo();
demo.DemoUtils.bar();
3.如果多個(gè)不同文件的包名相同且@JvmName注解相同,可用@JvmMultifileClass注解,編譯器能夠生成一個(gè)單一Java外觀類(lèi)
// 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調(diào)用kotlin
demo.Utils.foo();
demo.Utils.bar();
3.對(duì)象字段(Instance Field)
如果kotlin屬性有幕后字段(backing field),且沒(méi)有private/open/override/const修飾符,且不是委托屬性;
可以用@JvmField注解標(biāo)注kotlin屬性,使對(duì)應(yīng)的Java字段與kotlin屬性可見(jiàn)性相同(默認(rèn)public)!
// kotlin
class C(id: String) {
@JvmField val ID = id
}
// Java調(diào)用kotlin
class JavaClient {
public String getID(C c) {
return c.ID;
}
}
延遲初始化的屬性(lateinit修飾),其對(duì)應(yīng)的Java字段的可見(jiàn)性與Kotlin屬性訪(fǎng)問(wèn)器setter相同!
簡(jiǎn)書(shū):http://www.reibang.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