Kotlin 基础知识积累

自定义函数式接口

2021-05-27  本文已影响0人  jkwen

在 Kotlin 的 lambda 编程中有说过对于单个抽象方法的接口可以用 lambda 进行简写,这种特殊的接口俗称函数式接口,在实际项目里用起来也是极为简便,最典型的就是 setOnClickListener 方法。

今天在写接口时想到,如果我写一个仅有一个抽象方法的接口,应该也能用 lambda 表示,就像下面这样,

interface OnDialogOpListener {
    fun onConfirm(view: View)
}

但在调用 set 方法时,我却只能用 object 匿名内部类的形式实现,IDE 并没有提示我可以用 lambda,我强行用的话还报错了。可见普通方式的声明定义不太行。后来我搜到了这篇文章 https://www.kotlincn.net/docs/reference/fun-interfaces.html ,介绍 kotlin 的函数式接口。不同点在于在 interface 的前面又增加了 fun 修饰,表明这是个函数式接口,这点和 OnClickListener 接口是不同的,后者本身用 Java 实现,所以并不能看出特殊,而用 fun 修饰接口,才是声明函数是接口规范的做法。

fun interface OnDialogOpListener {
    fun onConfirm(view: View)
}

像上面这样就是一个标准的函数式接口了,这下就能用 lambda 来表示了。不过要注意的是,当接口有多个抽象方法时,fun 修饰你想用也用不上,因为这只能限定在单抽象方法的接口上。

嗯,又学到了一点。

上一篇下一篇

猜你喜欢

热点阅读