Rx java 为什么不建议在一个管道中修改对象
我有一个关于RxJava的一般性问题。我在很多地方看到过这样的说法,即完全不建议在一个管道步骤中修改对象。您应该创建一个新的并传递它,或者使用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);
doOnNext()
获得副作用
比如说
Observable.fromIterable(users)
.map(user -> {
user.name =//do something with name);
user.age = // do something with age);
return user;
}).subscribe(user -> {
});
如您所见,用户对象正在管道步骤中修改。但这段代码运行良好,没有任何问题。但为什么这被认为是一种不好的做法呢?有人能更好地解释为什么对象在整个流中都是不可变的吗?因为无法保证这些对象的源不会重用它们。例如,如果使用
publish
操作符,所有内部观察对象都将接收相同的对象。原始源还可能尝试重用对象,因此在不应该的情况下进行变异
为了减少发生这种情况的可能性,建议在管道内转换时创建新对象。因为无法保证这些对象的源不会重用它们。例如,如果使用
publish
操作符,所有内部观察对象都将接收相同的对象。原始源还可能尝试重用对象,因此在不应该的情况下进行变异
为了减少发生这种情况的可能性,建议在管道内进行转换时创建新对象