既然我们都学Kotlin了,为什么还有学Java?
Android SDK仍然是用Java编写,很多时候调用SDK接口仍然需要一些Java知识。
如果我们在Kotlin代码中调用一个Java方法,并且此方法接收一个Java单抽象方法接口函数
,就可以使用函数式API
。
Java单抽象方法接口函数
:指接口中只有一个待实现方法,若有多个待实现方法,则无法使用函数式API
可能不太好理解,我们使用一个Java原生API中的单抽象方法接口
——Runnable接口
。而接口里只有一个run()
方法。函数的定义如下:
public interface Runnable{
void run();
}
对于任何一个Java方法
,只要它接收Runnable函数
,就可以使用函数式API
。
那么什么Java方法接收了Runnable函数?当然有很多。更多时候Runnable函数接口结合线程一起使用。
fun main(){
Thread(object:Runnable{
override fun run(){
println("线程已开始运行。")
}
}).start()
}
代码中使用object
创建了一个匿名类实例。
目前我们写的Thread类
是符合Java函数式API
使用条件的。下面我们对代码进行简化:
Thread(Runnable{
println("线程已开始运行。")
}).start()
- Runnable类中只有一个代实现的方法,也没有显式地重写
run()
方法,Kotlin也会明白Runnable
后的Lambda表达式就是run()
方法中实现的内容。
当然,如果一个Java方法的参数列表只有一个单抽象方法接口参数时,我们的接口名字都可省略:
Thread {
println("线程已开始运行。")
}.start()
实例:
Android里有一个常用的点击事件接口OnClickListener
,用于监听点击,并作出响应。
Public interface OnClickListener {
void onClick(View v);
}
假设我们已有一个按钮botton,我们去注册这个按钮的点击事件。
botton.setOnClickLister{
}
当然Kotlin的高阶函数很强大,不需要像Java这样来实现,这里的方法只用于单抽象方法接口。
欢迎关注小试编程