我有一个关于RxJava的一般问题。我在许多地方都看到过,我们不建议在一个管道步骤中修改对象。您应该创建一个新的并将其传递下来,或使用doOnNext()
进行副作用。
例如
Observable.fromIterable(users)
.map(user -> {
user.name =//do something with name);
user.age = // do something with age);
return user;
}).subscribe(user -> {
});
如您所见,正在管道步骤中修改用户对象。但是这段代码没有问题。但仍然为什么它被认为是一种不好的做法?任何人都可以更好地解释为什么在整个流中对象应该是不可变的吗?
答案 0 :(得分:4)
因为没有保证这些对象的来源不会重复使用它们。例如,如果您使用publish
运算符,则所有内部可观察对象都将接收相同的对象。原始来源也可能尝试重新使用对象,因此在不应该变异的情况下进行变异。
为减少发生这种情况的可能性,建议在管道内进行转换时创建新对象。