ray-note/语言/Kotlin/2023-11-16.md

843 B

Bug:

Kotlin 在 做 val 声明的对象 作为参数传递时,对象内的属性的值如果被修改,则原有对象的值也会产生变化,反之亦然。

今天遇到的问题时,

  • 我在FragmentA 中将 ObjectA 写入到 FragmentAFragmentB 两个页面共享的 一个 ViewModel 中,
  • 然后修改原来在 ObjectA 的属性值,之后进入到 FragmentB 中 (这么做的原因是因为每一次进入FragmentA 都需要 ObjectA 的属性值得到更新,但是放在启动 FragmentB 之前就直接清除了,这么做,导致了,后面的问题)
  • 最后在 FragmentB 中获取到错误的值

解决办法:

  • val 改成 var, 或者修改 Object 清除属性值的时间点,把清除操作放到进入FragmentA 开始运行时的回调当中