RxJava(或Rx.NET)相当于ReactiveCocoa的RACObserve

mar*_*oop 8 reactive-programming system.reactive reactive-cocoa rx-java

给定Java对象上的任意字段,我想创建一个Observable,它将监视该字段,并在每次字段值更改时将新结果推送到Observer.ReactiveCocoa有一个名为RACObserve的宏,它似乎就是这样做的.

我想知道如何使用RxJava实现类似的功能.

例如,假设我有以下简单类:

public class Foo {
    enum State {
        Idle,
        Ready,
        Error
    }

    private State currentState = State.Idle;

    //methods that can change currentState
}
Run Code Online (Sandbox Code Playgroud)

我想创建一个Observable<State>将每次更改值的新状态推送到Observer时currentState.

在ReactiveCocoa中,看起来我会写下类似的东西(请原谅我的伪Objective-C):

[RACObserve(self, currentState) subscribeNext:^(NSString *newState) {
    NSLog(@"%@", newState);
}];
Run Code Online (Sandbox Code Playgroud)

我如何在RxJava中实现类似的功能?我想我可能需要在setter中包含对currentState的所有更改,但是我不清楚我应该在哪里调用Observable.create以及如何将currentState的更改提供给Observer.

cvb*_*ros 0

由于您的问题标题包含“或 Rx.NET”,这是我的建议(我不知道 RxJava,您可能会找到类似的东西)。

您可能必须利用设置器中的某种机制。.NET 中的标准方法是使用INotifyPropertyChanged接口。然后通过触发事件,您可以IObservable<T>使用此流 创建一个Observable.FromEvent<TEvent, TArgs>()

您可以在此处找到您想要执行的操作 (.NET) 的一个非常好的示例。

(感谢罗布·丰塞萨-恩索尔