Мой класс котлин:

class InstallationReceiver(activity : RootActivity, url : String, progressCallback : 
((percentage : Int) -> Unit)?,  callback : ((isUpdated : Boolean) -> Unit)?, packageName: 
String){

//my code

}

Я передаю лямбда-веселье в этот класс из класса Java следующим образом:

new InstallationReceiver(getActivity(), apkUrl, integer -> **{ 
String text = "Installing app"+integer;
textView.setText(text);
}**,true,null);

Почему эта лямбда-функция требует возвращаемый тип Unit? Я даже пытался вернуть Unit.INSTANCE, но ничто не помогло мне. Это все еще показывает ошибку.

0
Satyam Kamboj 20 Дек 2019 в 19:14

1 ответ

Лучший ответ

Что это за звездочки?
Я попробовал этот минимальный пример, и он работает:

Котлин

class InstallationReceiver(
    a: ((percentage: Int) -> Unit)?
) 

Ява

new InstallationReceiver(percentage -> {
    String text = "Installing app" + percentage;
    return Unit.INSTANCE;
});

Кроме того, вы передаете true и null, где конструктор ожидает лямбда-выражение ((isUpdated : Boolean) -> Unit) и String, не допускающее значения NULL.
Вы можете обойтись без компиляции при передаче нулевой строки (этого не следует делать, поскольку приложение выйдет из строя во время выполнения), но наверняка вам нужно передать лямбда вместо логического.
Что-то похожее на приведенный выше пример:

isUpdated -> {
    // your code
    return Unit.INSTANCE;
}
2
gpunto 20 Дек 2019 в 18:52