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")
    }
}

该学谁不用我说了吧。

相关推荐
Kapaseker7 小时前
实战 Compose 中的 IntrinsicSize
android·kotlin
A0微声z2 天前
Kotlin Multiplatform (KMP) 中使用 Protobuf
kotlin
alexhilton3 天前
使用FunctionGemma进行设备端函数调用
android·kotlin·android jetpack
lhDream3 天前
Kotlin 开发者必看!JetBrains 开源 LLM 框架 Koog 快速上手指南(含示例)
kotlin
RdoZam3 天前
Android-封装基类Activity\Fragment,从0到1记录
android·kotlin
Kapaseker3 天前
研究表明,开发者对Kotlin集合的了解不到 20%
android·kotlin
糖猫猫cc4 天前
Kite:两种方式实现动态表名
java·kotlin·orm·kite
如此风景4 天前
kotlin协程学习小计
android·kotlin
Kapaseker4 天前
你搞得懂这 15 个 Android 架构问题吗
android·kotlin
zh_xuan4 天前
kotlin 高阶函数用法
开发语言·kotlin