我正在开发一个包含一些 View 的 android 库。自然,这些 View 可以发出事件。
我有一个名为(仅出于此问题的目的)Listener
的接口(interface)。如果我用 Java 编写库,事情会是这样的:
public interface Listener {
void onEvent();
}
public class SomeView extends FrameLayout {
// Some more functions and implementation details
public void setListener(Listener l) { ... }
}
在 Kotlin Activity 中使用此 View 时,我可以像这样使用 setListener
:
someViewInstance.setListener {
// implementation
}
我想在 Kotlin 中编写我的库,但它也可能在 Java 代码中使用,所以我想像常规 View (如上)一样为监听器提供和接口(interface),但可以选择 Kotlin 代码使用函数实现:
interface Listener {
fun onEvent()
}
当我尝试在我的 Kotlin 测试 Activity 中像上面一样使用 setListener
时,我收到一个编译错误,指出该函数需要类型 Listener
但得到了 () -> 单位
.
有没有办法在 Kotlin 中启用这种实现而无需为此创建新函数?
我曾想过只有一个函数接收 () -> Unit
但在 Java 代码中看起来很奇怪(Function1
等)。
谢谢!
最佳答案
您可以按照建议定义您的界面,还可以添加一个扩展,允许使用更适合 Kotlin 代码的 lambda。
class SomeView {
fun setListener(l: Listener) {}
}
fun SomeView.setListener(l: () -> Unit) = setListener(object : Listener {
override fun onEvent() = l()
})
在 Java 中,您仍然可以传递 Listener
实现。
关于android - Kotlin 中的接口(interface)作为函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55116769/