为什么不建议在一个管道中修改对象

时间:2018-03-25 07:46:56

标签: rx-java rx-java2

我有一个关于RxJava的一般问题。我在许多地方都看到过,我们不建议在一个管道步骤中修改对象。您应该创建一个新的并将其传递下来,或使用doOnNext()进行副作用。

例如

 Observable.fromIterable(users)
        .map(user -> {
            user.name =//do something with name);
            user.age = // do something with age);
            return user;
        }).subscribe(user -> {

        });

如您所见,正在管道步骤中修改用户对象。但是这段代码没有问题。但仍然为什么它被认为是一种不好的做法?任何人都可以更好地解释为什么在整个流中对象应该是不可变的吗?

1 个答案:

答案 0 :(得分:4)

因为没有保证这些对象的来源不会重复使用它们。例如,如果您使用publish运算符,则所有内部可观察对象都将接收相同的对象。原始来源也可能尝试重新使用对象,因此在不应该变异的情况下进行变异。

为减少发生这种情况的可能性,建议在管道内进行转换时创建新对象。