函数式接口
接口只有一个抽象方法的接口,称为 函数式接口
functional interface
,也叫做Single Abstract Method(SAM) interface
。
注:函数式接口,只有一个抽象方法,但可以有多个非抽象方法。
一、Kotlin
Kotlin支持 lambda 表达式,对应的接口声明 fun interface
:
fun interface IPredicate {
fun accept(i: Int): Boolean
}
函数式接口,可以 lambda 方式创建:
val p = IPredicate {
}
非 函数式接口,则只能 普通 对象创建方式:
val = object : IPredicate {
}
二、Kotlin对 Java SAM 转换支持
Kotlin 对于Java的支持意味着:
只有一个非默认方法(non-default method) 的 Java 接口,只要 方法参数 和 Kotlin函数参数匹配,都可以在 Kotlin 中使用。
比如 Runnable 的使用:
val r = Runnable {
}
补充说明:
Java 8 引入了 默认方法(default method),接口方法 支持
default
默认实现。相对 默认方法,没有默认实现就是 非默认方法(non-default method)。
三、Java的函数式接口
Java通过 @FunctionalInterface
注解,声明 函数式接口。文章来源:https://www.toymoban.com/news/detail-810011.html
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
注:Kotlin 支持 Java SAM 转换,是根据 方法参数匹配,而非 Java的注解支持。文章来源地址https://www.toymoban.com/news/detail-810011.html
文档
- Functional (SAM) interfaces
- 函数式(SAM)接口 kotlincn
- SAM conversions
到了这里,关于Kotlin 函数式接口的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!