RxJava 可观察为 class 字段
RxJava observable as class field
假设我们有一个 rxjava observable 作为 class 字段:
public class MyClass {
private final Observable<Integer> myObservable = Observable.just(1);
public Observable<Integer> getMyObservable() {
return myObservable;
}
}
在这种情况下,只有一个 observable 实例共享给 class 个客户端。
当总是返回一个新的可观察实例时,性能影响如何:
public class MyClass{
public Observable<Integer> getMyObservable() {
return Observable.just(1);
}
}
我问是因为在我的代码库中,我有很多在方法调用时创建和返回的可观察对象。
我想知道创建 class 个实例然后返回是否是个好主意?
我认为在性能方面没有太大区别。无论如何,我在第一个实现中看到了一个问题:我认为你不会总是使用 1 作为要从 Observable
发出的项目。可能,确实,你想要这样的东西:
public class MyClass {
private int value = 100;
private final Observable<Integer> myObservable = Observable.just(value);
public Observable<Integer> getMyObservable() {
return myObservable;
}
}
我的意思是,我希望发出 class 的参数,就像示例中那样。
问题在于发出的值将始终为 100,而不管变量将采用的下一个值如何。让我们看一个例子:
MyClass mc = new MyClass();
mc.getMyObservable().subscribe(value -> print(value));
mc.setValue(200);
mc.getMyObservable().subscribe(value -> print(value));
您希望打印 100 和 200,但您得到的是双倍的 100。这是因为当您将 Observable.just(value)
分配给变量 myObservable
时,您正在固定值将始终发出。
为了防止这种情况,您可以使用 defer
运算符:
private final Observable<Integer> myObservable = Observable.defer(() -> Observable.just(value));
现在,Observable 发出的项将是订阅时变量的值。
注意:您可以使用 fromCallable
运算符获得相同的结果:
private final Observable<Integer> myObservable = Observable.fromCallable(() -> value);
假设我们有一个 rxjava observable 作为 class 字段:
public class MyClass {
private final Observable<Integer> myObservable = Observable.just(1);
public Observable<Integer> getMyObservable() {
return myObservable;
}
}
在这种情况下,只有一个 observable 实例共享给 class 个客户端。
当总是返回一个新的可观察实例时,性能影响如何:
public class MyClass{
public Observable<Integer> getMyObservable() {
return Observable.just(1);
}
}
我问是因为在我的代码库中,我有很多在方法调用时创建和返回的可观察对象。 我想知道创建 class 个实例然后返回是否是个好主意?
我认为在性能方面没有太大区别。无论如何,我在第一个实现中看到了一个问题:我认为你不会总是使用 1 作为要从 Observable
发出的项目。可能,确实,你想要这样的东西:
public class MyClass {
private int value = 100;
private final Observable<Integer> myObservable = Observable.just(value);
public Observable<Integer> getMyObservable() {
return myObservable;
}
}
我的意思是,我希望发出 class 的参数,就像示例中那样。
问题在于发出的值将始终为 100,而不管变量将采用的下一个值如何。让我们看一个例子:
MyClass mc = new MyClass();
mc.getMyObservable().subscribe(value -> print(value));
mc.setValue(200);
mc.getMyObservable().subscribe(value -> print(value));
您希望打印 100 和 200,但您得到的是双倍的 100。这是因为当您将 Observable.just(value)
分配给变量 myObservable
时,您正在固定值将始终发出。
为了防止这种情况,您可以使用 defer
运算符:
private final Observable<Integer> myObservable = Observable.defer(() -> Observable.just(value));
现在,Observable 发出的项将是订阅时变量的值。
注意:您可以使用 fromCallable
运算符获得相同的结果:
private final Observable<Integer> myObservable = Observable.fromCallable(() -> value);