Kotlin函数式接口

函数式接口

接口只有一个抽象方法的接口,称为 函数式接口 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 注解,声明 函数式接口。

@FunctionalInterface
public interface Runnable {
   
    public abstract void run();
}

注:Kotlin 支持 Java SAM 转换,是根据 方法参数匹配,而非 Java的注解支持。

文档

相关推荐

  1. Kotlin函数接口

    2024-01-11 17:32:02       57 阅读
  2. Kotlin 函数编程与lambda表达式

    2024-01-11 17:32:02       27 阅读
  3. Kotlin 接口

    2024-01-11 17:32:02       52 阅读
  4. 函数接口 Consumer、Function、Supplier、Predicate

    2024-01-11 17:32:02       34 阅读
  5. Lambda表达式与函数接口

    2024-01-11 17:32:02       31 阅读
  6. kotlin接口详解

    2024-01-11 17:32:02       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-11 17:32:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-11 17:32:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-11 17:32:02       82 阅读
  4. Python语言-面向对象

    2024-01-11 17:32:02       91 阅读

热门阅读

  1. C# 的SequenceEqual

    2024-01-11 17:32:02       47 阅读
  2. 如何防止 DNS 攻击造成的损失

    2024-01-11 17:32:02       51 阅读
  3. PostgreSQL 归档和基于时间点恢复

    2024-01-11 17:32:02       49 阅读
  4. go 语言常见问题(2)

    2024-01-11 17:32:02       55 阅读
  5. 并发编程(一)

    2024-01-11 17:32:02       55 阅读
  6. What does rpm do?

    2024-01-11 17:32:02       56 阅读
  7. Linux 之间通过 SSH 传输文件

    2024-01-11 17:32:02       52 阅读