Kotlin 函数式接口

文章目录

  • 定义
  • 实例化
  • [Kotlin 调用 Java 单抽象方法接口](#Kotlin 调用 Java 单抽象方法接口)

定义

在 Kotlin 中,如果一个接口只有 一个抽象方法(其他非抽象成员数量不限),可以写成类似函数的形式。

kt 复制代码
fun interface Editable {
    // 此处 abstract 可省略
    abstract fun edit()
}

实例化

正常情况下,我们实例化接口需要用到匿名对象object {}:

kt 复制代码
fun main() {
    val editable = object : Editable {
        override fun edit() {
            print("编辑中...")
        }
    }
    editable.edit()
}
复制代码
编辑中...

而定义了函数式接口后,我们可以这样做:

kt 复制代码
fun main() {
    val editable = Editable { 
        print("编辑中...")
    }
}

Kotlin 调用 Java 单抽象方法接口

(不知道 Java 是什么可以跳过)

在 Java 中的Runnable接口中只定义了一个抽象方法run,这样的 Java 单抽象方法接口在 Kotlin 中是可以像调用函数式接口fun interface一样调用的(Kotlin 的接口则必须在定义时interface前加fun才行):

java 复制代码
// Runnable.java
@FunctionalInterface
public interface Runnable {
    /**
     * Runs this operation.
     */
    void run();
}

如果使用 Java 实例化该接口,需要这样写:

java 复制代码
public class Test {
    public static void main(String[] args) {
    	// 这是实例化的位置
        new Runnable() {
            @Override
            public void run() {
                System.out.print("Run");
            }
        };
    }
}

而使用 Kotlin 是这样写的:

kt 复制代码
fun main() {
	object : Runnable {
        override fun run() {
            print("Run")
        }
    }
}

使用函数式接口调用的写法后,它又是这样的:

kt 复制代码
fun main() {
    Runnable {
        print("Run")
    }
}

该学谁不用我说了吧。

相关推荐
传奇开心果编程40 分钟前
【Jetpack Compose娓娓道来】第29课:状态容器与UI事件建模——把“散装状态”变成“可穷举的契约”
android·kotlin·移动开发·android jetpack·ui框架·开发范式·声明式ui
我是唐青枫1 天前
Kotlin Inheritance(继承)详解:语法、原理、实战 Demo
开发语言·kotlin
Goway_Hui2 天前
【KMP for OpenHarmony】-- 在鸿蒙工程中使用 Apollo-Kotlin
华为·kotlin·harmonyos
释厄6232 天前
AI 军备竞赛悖论——为 AI 卖游戏但 AI 需要游戏母场景
人工智能·游戏·kotlin
D e re k ZH2 天前
保序回归:从 PAVA 到可并堆的单调约束优化
c++·算法·数据挖掘·回归·kotlin
Goway_Hui2 天前
【KMP for OpenHarmony】Cache4k 0.14.0 鸿蒙适配
华为·kotlin·harmonyos
YB13752 天前
kotlin与函数式编程
kotlin
我是唐青枫3 天前
Kotlin Delegation 委托详解
开发语言·kotlin
唐青枫3 天前
Kotlin Inheritance(继承)详解:语法、原理、实战 Demo
kotlin
alexhilton4 天前
用Konsist与Lint强制执行设计系统契约
android·kotlin·android jetpack