抽象乐趣调用()未实现

Abstract fun invoke() not implemented

我创建了一个视图,但我的 Buttons ClickListener 界面遇到了问题。 界面看起来像这样

interface CustomButtonsClickListener : () -> Unit {
        fun onPlusClick(view: View, button: ImageButton)
        fun onMinusClick(view: View, button: ImageButton)
    }

通过方法实现:

fun setCustomButtonsClickListeners(clickListener: CustomButtonsClickListener) {
        binding.addButton.setOnClickListener {
            clickListener.onPlusClick(this, binding.addButton)
        }
        binding.minusButton.setOnClickListener {
            clickListener.onMinusClick(this, binding.minusButton)
        }
    }

这是“外面”的样子

view.setCustomButtonsClickListeners(object : CustomButtonsClickListener {
                    override fun onPlusClick(view: View, button: ImageButton) {

                    }

                    override fun onMinusClick(view: View, button: ImageButton) {

                    }

                })

问题: 我在 object 上收到错误消息:
Object is not abstract and does not implement abstract member public abstract fun invoke()...

方法是什么invoke(),应该如何实现?我宁愿在视图中执行此操作 class,这样我就不必在应用程序中的某处使用视图时执行此操作。

这看起来像是对语法的混淆。该行:

interface CustomButtonsClickListener : () -> Unit {

创建一个扩展 () -> Unit 的接口(并继续向其添加两个方法)。

() -> Unit 是一种不带参数的函数类型,returns 没有任何用处。您通常不需要知道该函数的名称(因为 lambda 语法隐藏了它),但这是您发现它被称为... invoke()!

的极端情况之一

(在the documentation中有描述)

所以你用三个方法定义了一个接口:一个继承自父接口,另外两个在这里声明。

当然,当您尝试实现接口但只实现这三个方法中的两个时,编译器会抱怨您忘记了第三个。

我猜你只是想要一个只有你的两个新方法的接口,所以你可以简单地声明它:

interface CustomButtonsClickListener {