gpt4 book ai didi

将类传递给函数的 Kotlin 惯用方式

转载 作者:行者123 更新时间:2023-12-02 02:04:36 25 4
gpt4 key购买 nike

我有一个方法,它调用一个需要回调对象作为参数的对象方法。回调对象必须定义 2 个方法:onEvent1() 和 onEvent2()。

一种方法是内联完成所有操作,但结果是它是 super 嵌套的并且变得不可读

myObj.method1(object : baseType {
override fun onEvent1() {
10 lines of nested code
}
override fun onEvent2() {
more nested code
}
)

鉴于一个方法超过 10 行,我发现它非常难以阅读。

在 Kotlin 中执行此操作的最佳方法是什么?

我知道的唯一非 kotlin 惯用方法是声明一个类并传递它的一个对象,也许是内部类。

void mymethod() {
class Obj : baseType {
override fun onEvent1() {....}
override fun onEvent2() {....}
}

val obj : Obj
myObj.method1(obj)
}

有更好的方法吗?

最佳答案

如果您为两个回调使用两个 lambda 表达式会怎样? lambda 的类型将是回调函数的类型:在您的示例 () -> Unit 中,对于不带参数并返回 Unit 结果的函数。首先,我们创建一个新方法,它接受两个回调并将它们包装到一个对象中:

fun myMethod(callback1: () -> Unit, callback2: () -> Unit) {
myObj.method1(object : baseType {
override fun onEvent1() { callback1() }
override fun onEvent2() { callback2() }
})
}

然后我们可以像这样调用新方法:

myMethod(
callback1 = { ... },
callback2 = { ... }
)

这比每次声明一个新对象要简洁一些。另一个好处是我们可以在将回调传递给函数之前单独定义它们:

val callback1 = { ... }
val callback2 = { ... }
myMethod(callback1, callback2)

关于将类传递给函数的 Kotlin 惯用方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68609715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com