我有一个关于 RxJava 的一般性问题。我在很多地方看到说完全不建议在一个管道步骤中修改对象。您应该创建一个新的并将其传递下去,或doOnNext()用于副作用。
例如
Observable.fromIterable(users)
.map(user -> {
user.name =//do something with name);
user.age = // do something with age);
return user;
}).subscribe(user -> {
});
Run Code Online (Sandbox Code Playgroud)
如您所见,用户对象正在管道步骤中被修改。但是这段代码运行良好,没有任何问题。但是为什么它被认为是一种不好的做法呢?任何人都可以更好地解释为什么对象在整个流中应该是不可变的?
因为无法保证这些对象的来源不会重用它们。例如,如果您使用publish运算符,则所有内部可观察对象都将收到相同的对象。原始来源也可能会尝试重用对象,因此在不应该发生的情况下发生了变异。
为了减少发生这种情况的机会,建议在管道内转换时创建新对象。
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |