kotlin - 未实现的抽象乐趣调用()
问题描述
我创建了一个视图,但我的 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()
,我应该如何实现它?我宁愿在 View 类中这样做,这样我就不必在应用程序中的某个地方使用 View 时这样做。
解决方案
这看起来像是对语法的混淆。该行:
interface CustomButtonsClickListener : () -> Unit {
创建一个扩展接口() -> Unit
(并继续向其添加两个方法)。
() -> Unit
是不带参数且不返回任何有用的函数的类型。您通常不需要知道该函数的名称(因为 lambda 语法隐藏了它),但这是您发现它被调用的那些极端情况之一…… invoke()
!
(它在文档中有所描述。)
因此,您正在定义一个具有三种方法的接口:一种从父接口继承,另两种在此处声明。
因此,当然,当您尝试实现接口但只实现这三个方法中的两个时,编译器会抱怨您忘记了第三个。
我猜你只想要一个只有两个新方法的接口,所以你可以简单地声明它:
interface CustomButtonsClickListener {
推荐阅读
- html - div 以错误的顺序出现(垂直)
- ruby - 读取一次文件句柄
- javascript - ReactJS:试图在状态内部的数组中获取值
- c++ - make clean 不会删除其他目录中的文件
- javascript - SVG在动画时和完成动画后不显示中心
- eclipse - 如何让 Eclipse 正确打开一个 gradle 项目?
- java - 我应该如何构建这个while循环?(JAVA)
- react-hooks - 如何处理独立的、长时间运行的 useEffect 操作?
- python - 在 Android 上安装 Scapy
- ios - 从 UIDocumentPickerViewController 中选择文件夹时,第三方文件提供程序显示为灰色?