Kotlin-39.kotlin调用Java之一(Call Java from Kotlin)
官方文档: http://kotlinlang.org/docs/reference/java-interop.html
1.在Kotlin中调用Java代码(Calling Java code from Kotlin)
Kotlin在设计时就考虑了与Java的互操作性,
所以可以轻松在Kotlin中调用现有Java代码,也能顺利在Java中调用Kotlin代码!
在Kotlin使用Java的集合类的示例如下:
import java.util.* //导入java类库util
fun demo(source: List<Int>) {
val list = ArrayList<Int>()
// kotlin的for循环对Java集合类同样有效
for (item in source) {
list.add(item)
}
// kotlin操作符对java同样有效
for (i in 0..source.size() - 1) {
list[i] = source[i] //get和set访问器被调用(见下文)
}
}
2.Getter和Setter方法
如果java字段成员的getter和setter方法遵循Java惯例(即名称以get开头的无参数方法和以set开头的单参数方法),
它们在Kotlin中都被表示为kotlin属性,可以直接调用,例如:
import java.util.Calendar //导入java日历类库
fun calendarDemo() {
val calendar = Calendar.getInstance()
//相当于调用calendar.getFirstDayOfWeek()
if (calendar.firstDayOfWeek == Calendar.SUNDAY) {
//相当于调用calendar.setFirstDayOfWeek(Calendar.MONDAY)
calendar.firstDayOfWeek = Calendar.MONDAY
}
}
注意:
如果Java类某字段只有一个setter,在Kotlin中不会作为kotlin属性!
因为Kotlin目前不支持只写(set-only)属性!
3.返回void的方法(Methods returning void)
如果一个Java方法返回void,那么从Kotlin调用时中返回Unit,
如果使用该方法的返回值,它将被Kotlin编译器在调用处赋值,因为该值本身是预先知道(即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标识符(Kotlin关键字)进行转义(Escaping for Java identifiers)
一些Kotlin关键字在Java中是有效标识符(如in,object,is等),
如果Java类库使用了Kotlin关键字作为方法名,可用反引号(`)转义java方法名,然后在kotlin调用该方法
示例:
//is()是java方法名/函数名,但is是kotlin关键字,所以在kotlin中需要添加反引号`转义
foo.`is`(bar)
简书:http://www.jianshu.com/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