Как читать с java обратный вызов из класса kotlin (Android) - PullRequest
0 голосов
/ 09 января 2020

Это мой kotlin класс:

class example {

    var a = 0

    fun add(b: Int, callback: (Int) -> Unit){
        a += b
        callback(a)
    }
}

Как использовать эту функцию в java коде?

1 Ответ

1 голос
/ 09 января 2020

Редактировать: Как упоминалось в комментариях @Drawn Raccoon, вы можете вызвать метод add из кода java, просто возвратив Unit.INSTANCE:

Java:

example e = new example();
e.add(16, a -> {
    // do some work with 'a'
    return Unit.INSTANCE;
});

Или позвоните по номеру kotlin, не возвращая никакого значения:

Kotlin:

add(16) {
    a -> // do some work with 'a'
}

Не правильно (правильный ответ см. для редактирования раздела):

Я думаю, вы не можете использовать тип Unit для типа вывода обратного вызова, который будет вызываться из кода java. Unit не распознается в Java. Вместо этого вы можете использовать Void? (я не знаю о 'Void', и теперь я не могу его проверить).

Код в kotlin:

class example {

    var a = 0

    fun add(b: Int, callback: (Int) -> Void?){
        a += b
        callback(a)
    }
}

И вызов это от java:

example e = new example();
e.add(16, a -> {
    // do some work with 'a'
    return null;
})

И звоните от kotlin:

val example = example()
e.add(16, { a ->
    // do some work with 'a'
    null
})

[Кроме того, «пример» не подходит для kotlin или java классы и попробуйте использовать верхний регистр, как 'Пример']

...