Intereting Posts
SparkJava не может работать вместе с некоторыми API-интерфейсами Google Youtube почему вызов setText () в OnFocusChangeListener очищает текст в представлении? Настройка Jackson для использования SNAKE_CASE «глобально» в Spring Boot 2.0.0.M1 Ошибка: Содержит незаконное финальное поле – Котлин Параметр аннотированного типа в Java для компилятора Kotlin Spring Data Neo4j 5's EntityScan содержит сопутствующие объекты при использовании Kotlin Предоставлять насмешливый объект другому конструктору конструктивного объекта? Создание исполняемой толстой баночки с град-скрипт-котлин Компиляция приложения Kotlin Android не удалась с сообщением: Неразрешенная ссылка: kotlinx Что делает ключевое слово reified в Kotlin? Отслеживание сбоев потоков Как сделать вызов удаленного удаленного вызова (RPC) в Котлине? Java Int to Float, чтобы получить 1f для 1 Неразрешенная ссылка при ссылке на Java-код из тестов Kotlin в проекте Spring Boot с использованием Gradle Обработка задачи после загрузки фрагментов

Могу ли я создать метод расширения Kotlin для добавления rxJava-подписки на композитную подписку?

Я играл с Kotlin / RxJava и пытался создать метод расширения для добавления Subscription на CompositeSubscription Subscription , которая будет работать следующим образом:

 search.subscribe { //do stuff }.addToComposite(compositeSubscription) 

Это моя попытка:

 fun Subscription.addToComposite(composite: CompositeSubscription) = { composite.add(this) } 

Он компилируется и запускается без ошибок, но фактически не добавляет Subscription на CompositeSubscription Subscription . Я делаю что-то неправильно?

Ваша функция определена неправильно. Для сравнения:

 fun f() { println("hello") } 

Эта функция выполняет одиночный оператор println("hello") и является простой функцией Unit refurning (то же, что и в Java).

 fun g() = { println("hello") } 

Эта функция является функцией одного выражения , она просто возвращает значение выражения
{ println("hello") } , то есть лямбда-выражение . Возвращает тип g () -> Unit , и он не выполняет тело лямбда!

Это также объясняется здесь .


Чтобы исправить ваш код, вы можете просто удалить = из объявления функции:

 fun Subscription.addToComposite(composite: CompositeSubscription) { composite.add(this) }