Какие правила позволяют использовать интерфейс в качестве аргумента замыкающего лямбда?
Я думал, что единственное правило заключалось в том, чтобы у него была уникальная функция в своем определении, однако я столкнулся со следующей проблемой:
У меня был этот интерфейс 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) ** не компилируются с сообщением
Несоответствие типов: предполагаемый тип () -> Unit, но ToolbarFragment.ToolbarFragmentCallBack! ожидалось