Kotlin - 用两个不同的单方法接口替换单个双方法接口

Kotlin - Replace a single two-methods interface with two different one-method interfaces

首先,我想澄清一下,我的问题是针对个人代码风格偏好。

假设我有一个方法,它接受一个接口作为参数,并且所述接口中有两个方法。

在 kotlin 中,匿名实现接口,我们会有类似的东西

client.execute(object : Callback() {
    override fun onResponse(response: Response) {/*...*/}
    override fun onError(error: Error) {/*...*/}
})

我想做的是为 client 对象创建一个扩展,该扩展将采用两个不同的接口,例如

interface ClientResponse{fun onResponse(response: Response)}
interface ClientError{fun onError(error: Error)}

然后新的 execute 方法看起来像

client.executeCustom(
    {response -> /*...*/},
    {error -> /*...*/}
})

真是一种 SAM 解决方案。

有可能吗?

这应该是一个相当简单的扩展,您可以立即获取两个 lambda 参数,然后在其中创建一个 Callback 实例来委托对这些 lambda 的调用:

fun Client.executeCustom(onResponse: (Response) -> Unit, onError: (Error) -> Unit) {
    execute(object : Callback() {
        override fun onResponse(response: Response) = onResponse(response)
        override fun onError(error: Error) = onError(error)
    })
}

这样,你甚至不需要引入新的接口。