RxJava - 将 Observable 作为参数传递给方法

RxJava - Passing Observable as argument to method

将 Observabele 作为方法参数传递是否有代码味道? 我的项目使用 RxJava。 比如说我有以下 class:

public class MyClass{
//constructor and other property
public void doWork(Observable<SomeClass> obs){
//do things with the input observable
}

我不太愿意将 Observable 传递给一个方法,但我可能错了但没关系?

好的,根据您的评论,它应该是这样的:

class A {
    public final Observable<String> observable = Observable
        .just("some string")
        .replay(1).refCount()
}

class B(A aObject) {

    subscription = aObject
        .map { /*Do something on "some string"*/ }
        .subscribe(...)
}

请注意,如果您要多次使用此 observable(创建其他一些 observable,并在其他地方订阅它)并且如果它是一些获取数据的 Observable(获取数据),则需要 .replay(1).refCount()来自 API/DB)。

但如果observable不是"getting data from somewhere",而是一些时间敏感的动作(如用户点击、滚动等),最好使用.share()而不是.replay(1).refCount()

已编辑

根据您对点击的评论:我建议使用 lib。有了它,您的代码将如下所示:

class A {
    public final Observable<String> observable = someButton.clicks()
        .map { /* pass data you want here (get text from EditText)*/ }
        .share()
}

class B(Observable<String> observable) {

    subscription = observable
        .map { /*Do something on "some string"*/ }
        .subscribe(...)
}

但是如果你想让它变得更多 "RX",或者你需要在其他地方使用 editText 中的文本,你可以这样做:

class A {
    public final Observable<Void> clickObservable = 
        someButton.clicks().share()

    public final Observable<String> textObservable = editText.textChanges()
        .map { it.toString }
        .share()
}

class B(Observable<String> textObservable, Observable<Void> clickObservable) {

    subscription = clickObservable
        .withLatestFrom { click, text -> text }
        .subscribe(...)

    // textObservable can be used more here
}