Как передать лямбду из Java в метод Kotlin? - PullRequest
3 голосов
/ 10 апреля 2019

Можно ли вызвать этот метод Kotlin из Java?

fun foo(() -> Unit)

Если да, то каков синтаксис?

Ответы [ 2 ]

4 голосов
/ 10 апреля 2019

Вы можете вызвать это, но нужно быть осторожным с типами возврата.Если ваша функция Kotlin возвращает Unit, Java будет либо возвращать Unit, либо null, потому что void не совсем то же самое, что Unit.

Мой работающий пример:

foo(() -> {
    System.out.println("Hi");
    return null;
});

Или, если вы хотите быть действительно откровенным о Unit ...

foo(() -> {
    System.out.println("Hi");
    return Unit.INSTANCE;
});
3 голосов
/ 10 апреля 2019

Вам необходимо создать экземпляр Function0:

foo(new Function0<Unit>() {
    @Override
    public Unit invoke() {
        // Here should be a code you need
        return null;
    }
});

или, если вы используете Java 8, это может быть упрощено

foo(() -> {
    // Here should be a code you need
    return null;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...