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

Rx java 为什么不建议在一个管道中修改对象,rx-java,rx-java2,Rx Java,Rx Java2,我有一个关于RxJava的一般性问题。我在很多地方看到过这样的说法,即完全不建议在一个管道步骤中修改对象。您应该创建一个新的并传递它,或者使用doOnNext()获得副作用 比如说 Observable.fromIterable(users) .map(user -> { user.name =//do something with name); user.age = // do something with age);

我有一个关于RxJava的一般性问题。我在很多地方看到过这样的说法,即完全不建议在一个管道步骤中修改对象。您应该创建一个新的并传递它,或者使用
doOnNext()
获得副作用

比如说

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

        });

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

因为无法保证这些对象的源不会重用它们。例如,如果使用
publish
操作符,所有内部观察对象都将接收相同的对象。原始源还可能尝试重用对象,因此在不应该的情况下进行变异


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

因为无法保证这些对象的源不会重用它们。例如,如果使用
publish
操作符,所有内部观察对象都将接收相同的对象。原始源还可能尝试重用对象,因此在不应该的情况下进行变异

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