передача наблюдателя и передача лямбды в метод skipUntil - PullRequest
3 голосов
/ 29 февраля 2020
RxJava 2

У меня есть следующие 2 примера использования skipUntil:

Эта функция передает лямбда-функцию в skipUntil:

   sourceSubject
            .skipUntil<Int> {
                triggerSubject.subscribe(it)
            }
            .subscribeBy { println(it) }

И эта передает наблюдателю :

sourceSubject
        .skipUntil(triggerSubject)
        .subscribeBy { println(it) }

Тем не менее, меня смущает сигнатура метода, поскольку кажется, что он использует только Observer, и я не мог видеть лямбду. Просто интересно, почему я могу передать наблюдателю и передать лямбду этой функции

Вот метод, который, кажется, только показывает передачу в Обозревателе:

public final <U> Observable<T> skipUntil(ObservableSource<U> other) {
        ObjectHelper.requireNonNull(other, "other is null");
        return RxJavaPlugins.onAssembly(new ObservableSkipUntil<T, U>(this, other));
    }

Большое спасибо заранее

1 Ответ

4 голосов
/ 01 марта 2020

Эта функция называется SAM Conversions . в основном это означает

, если объект реализует интерфейс SAM ( с единственным абстрактным методом ), вы можете передать лямбду вместо создания и передачи объект данного интерфейса.

В вашем случае skipUntil ожидает parameter типа ObservableSource и, поскольку ObservableSource равен SAM interface, вы можете передать lambda вместо полноценного object типа ObservableSource.

Так что даже если нет skipUntil function, который ожидает lambda, вы можете передать его из-за SAM Conversions .

...