如何解决抽象的乐趣 invoke() 未实现
我创建了一个视图,但我的按钮 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()
,我应该如何实现它?我宁愿在 View 类中执行此操作,这样我就不必在应用程序中的某处使用 View 时执行此操作。
解决方法
这看起来像是对语法的混淆。行:
interface CustomButtonsClickListener : () -> Unit {
创建一个扩展 () -> Unit
的接口(并继续向其添加两个方法)。
() -> Unit
是不带参数且不返回任何有用信息的函数类型。您通常不需要知道该函数的名称(因为 lambda 语法隐藏了它),但这是您发现它被称为……invoke()
!
(在 the documentation 中有描述。)
所以你定义了一个带有三个方法的接口:一个从父接口继承,另外两个在这里声明。
当然,当您尝试实现接口但只实现了这三个方法中的两个时,编译器会抱怨您忘记了第三个。
我猜你只想要一个只有你的两个新方法的接口,所以你可以简单地声明它:
interface CustomButtonsClickListener {
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。