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



将Observabele作为方法参数传递是代码气味吗?我的项目使用RxJava。例如,我有以下类:

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(...)
}

请注意,如果您要多次使用这个可观察对象(创建其他可观察对象,并在其他地方订阅它(,并且如果它是一些正在获取的数据可观察(从API/DB获取数据(,则需要.replay(1).refCount()

但如果observable不是"从某个地方获取数据",而是一些时间敏感的操作(如用户点击、滚动等(,那么最好使用.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
}

最新更新