既然我们都学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这样来实现,这里的方法只用于单抽象方法接口。
欢迎关注小试编程