官方文檔: http://kotlinlang.org/docs/reference/java-interop.html
1.在Kotlin中調(diào)用Java代碼(Calling Java code from Kotlin)
Kotlin在設(shè)計時就考慮了與Java的互操作性,
所以可以輕松在Kotlin中調(diào)用現(xiàn)有Java代碼,也能順利在Java中調(diào)用Kotlin代碼!
在Kotlin使用Java的集合類的示例如下:
import java.util.* //導(dǎo)入java類庫util
fun demo(source: List<Int>) {
val list = ArrayList<Int>()
// kotlin的for循環(huán)對Java集合類同樣有效
for (item in source) {
list.add(item)
}
// kotlin操作符對java同樣有效
for (i in 0..source.size() - 1) {
list[i] = source[i] //get和set訪問器被調(diào)用(見下文)
}
}
2.Getter和Setter方法
如果java字段成員的getter和setter方法遵循Java慣例(即名稱以get開頭的無參數(shù)方法和以set開頭的單參數(shù)方法),
它們在Kotlin中都被表示為kotlin屬性,可以直接調(diào)用,例如:
import java.util.Calendar //導(dǎo)入java日歷類庫
fun calendarDemo() {
val calendar = Calendar.getInstance()
//相當(dāng)于調(diào)用calendar.getFirstDayOfWeek()
if (calendar.firstDayOfWeek == Calendar.SUNDAY) {
//相當(dāng)于調(diào)用calendar.setFirstDayOfWeek(Calendar.MONDAY)
calendar.firstDayOfWeek = Calendar.MONDAY
}
}
注意:
如果Java類某字段只有一個setter,在Kotlin中不會作為kotlin屬性!
因為Kotlin目前不支持只寫(set-only)屬性!
3.返回void的方法(Methods returning void)
如果一個Java方法返回void,那么從Kotlin調(diào)用時中返回Unit,
如果使用該方法的返回值,它將被Kotlin編譯器在調(diào)用處賦值,因為該值本身是預(yù)先知道(即Unit)
//kotlin代碼
fun main(args: Array<String>) {
val v = VoidDemo.vid()
println(v) // 輸出kotlin.Unit
}
//java代碼
public class VoidDemo{
public static void vid(){
}
}
4.對Java標(biāo)識符(Kotlin關(guān)鍵字)進(jìn)行轉(zhuǎn)義(Escaping for Java identifiers)
一些Kotlin關(guān)鍵字在Java中是有效標(biāo)識符(如in,object,is等),
如果Java類庫使用了Kotlin關(guān)鍵字作為方法名,可用反引號(`)轉(zhuǎn)義java方法名,然后在kotlin調(diào)用該方法
示例:
//is()是java方法名/函數(shù)名,但is是kotlin關(guān)鍵字,所以在kotlin中需要添加反引號`轉(zhuǎn)義
foo.`is`(bar)
簡書:http://www.itdecent.cn/p/d75c0141d61e
CSDN博客: http://blog.csdn.net/qq_32115439/article/details/75000034
GitHub博客:http://lioil.win/2017/07/11/Kotlin-javaInKotlin.html
Coding博客:http://c.lioil.win/2017/07/11/Kotlin-javaInKotlin.html