【发布时间】:2019-12-30 19:53:18
【问题描述】:
使接口能够用作尾随 lambda 参数的规则是什么?
虽然我认为唯一的规则是它的定义必须具有独特的功能,但是我陷入了以下问题:
我有这个Java界面
public interface ToolbarFragmentCallBack {
void onNavigationClick();
}
从 java 类调用:
public void addToolBar(int container, String title, boolean isParent,
ToolbarFragment.ToolbarFragmentCallBack callback) {
//do something
}
从 Kotlin 和 Java 文件中调用:
科特林 (1):
addToolBar(R.id.toolbar_fragment, toolbarTitle, toolbarParent) {
presenter.onClickNavigationToolBar()
}
Java (2):
addToolBar(R.id.toolbar_fragment, definition.getTitle(), false, () -> {
activity.onBackPressed();
});
不过,我最近将界面迁移到了 Kotlin:
interface ToolbarFragmentCallBack {
fun onNavigationClick()
}
现在 **Kotlin (1) ** 实现调用无法编译,并带有消息
类型不匹配:推断类型为 () -> 单位但 ToolbarFragment.ToolbarFragmentCallBack!预料之中
【问题讨论】:
-
哦,谢谢,@jsamol,我不知道它只适用于 Java 接口。你想把它作为答案发布,以便我可以选择它吗?
标签: java kotlin lambda interface