使密封类成为其自己的Observable <T>属性的Observer

问题描述

我有一个密封班。它有一个属性 '

private IObservable<AnotherClass> observable

'。

  1. 我想让此类作为观察者并监视上述属性的变化。
  2. 只要此属性发生更改,我都想调用onNext()。
  3. 我想在.onNext()中调用自定义method1()。像onNext(调用Method1(传递可观察的数据))。 由于这是一个密封的类,因此无法使用在许多示例中发现的Virtual onNext()。

我如何实现这些目标?

解决方法

执行IObserver<AnotherClass>并订阅可观察的内容吗?

public sealed class AnObserver : IObserver<AnotherClass>
{
    private readonly IObservable<AnotherClass> observable;

    public AnObserver()
    {
        observable = ...;
        observable.Subscribe(this);
    }

    void IObserver<AnotherClass>.OnCompleted() { }

    void IObserver<AnotherClass>.OnError(Exception error) { }

    void IObserver<AnotherClass>.OnNext(AnotherClass value)
    {
        Method1(value);
    }

    public void Method1(AnotherClass value)
    {
       ...
    }
}
,

这是我应对这种情况的方式。

public sealed class ThisClass : IDisposable
{
    private readonly IObservable<AnotherClass> observable;
    private readonly IDisposable subscription;

    public ThisClass()
    {
        observable = ...;
        subscription = observable.Subscribe(x => Method1(x));
    }

    private void Method1(AnotherClass value)
    {
       ...
    }

    private bool disposedValue = false;

    void Dispose(bool disposing)
    {
        if (!disposedValue)
        {
            if (disposing)
            {
                subscription.Dispose();
            }
            disposedValue = true;
        }
    }

    public void Dispose()
    {
        Dispose(true);
    }
}

这不会将任何不必要的东西暴露给外界,并且会清除处置。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...