У меня есть метод котлина, как показано ниже
fun initDrawer(drawerView: DrawerView, drawerLayout: DrawerLayout, context: Context, onRefreshClick: () -> Unit) {
}
Но когда я пытаюсь передать initDrawer (drawerView, drawerlayout, this, onRefreshClick ()) это дает мне ошибку required () не может быть применено к (kotlin.Unit)
можно ли передавать методы из java в kotlin.




Допустим, ваш метод Java находится в классе с именем Test:
public class Test {
void onRefreshClick() {
System.out.println("test");
}
}
Это может быть вызвано вашей функцией Kotlin следующим образом (в качестве справки):
val t = Test()
initDrawer(drawerView, drawerlayout, this, t::onRefreshClick)
onRefreshClick также может быть статическим в Java, что позволит вам использовать его следующим образом:
initDrawer(drawerView, drawerlayout, this, Test::onRefreshClick)
Примечание:
В Kotlin () -> Unit - это тип функции, которая не имеет аргументов и ничего не возвращает (это Unit, а не Nothing в качестве возвращаемого типа).
В Java нет Unit. Метод Java, соответствующий этому типу, не будет иметь аргументов и будет иметь тип возвращаемого значения void.
onRefreshClick () - это java-метод
Вы должны установить возвращаемое значение вашего onRefreshClick в Unit:
private Unit onRefreshClick() {
//do something here
return Unit.INSTANCE;
}
Тогда вы можете назвать это так:
initDrawer(drawerView, drawerLayout, this, this::onRefreshClick);
() -> Unit - это функция (лямбда), которая возвращает Unit. Модуль onRefreshClick () {} - это то, что вам нужно.
Вы не можете передать свой Java-метод напрямую из Java, поскольку параметр Kotlin ожидает, что метод вернет Unit.
Вы можете следовать следующему шаблону:
kotlinClass.higherOrderFunction(() -> {functionToPass(); return Unit.INSTANCE;});
где functionToPass() определяется как:
private void functionToPass() {
// do something
}
В твоем случае:
initDrawer(drawerView, drawerlayout, this,
() -> {onRefreshClick(); return Unit.INSTANCE;})
Я верю эта проблема объясняет вашу ситуацию.