关于不变性影响的经验数据?

2022-09-03 07:33:56

在今天的课堂上,我的教授正在讨论如何构建一门课。这门课程主要使用Java,我比老师有更多的Java经验(他来自C++背景),所以我提到在Java中应该喜欢不可变性。我的教授要求我证明我的答案是正确的,我给出了我从Java社区听到的理由:

  1. 安全性(尤其是螺纹加工)
  2. 减少对象数量
  3. 允许某些优化(特别是对于垃圾回收器)

教授质疑我的说法,他说他希望看到对这些好处的一些统计测量。我引用了大量的轶事证据,但即使我这样做了,我也意识到他是对的:据我所知,还没有一个关于不变性是否真的提供了它在现实世界代码中所承诺的好处的实证研究。我知道这是从经验中得出的,但其他人的经验可能会有所不同。

所以,我的问题是,有没有对现实世界代码中不变性的影响进行过任何统计研究?


答案 1

我要指出有效Java中的第15项。不可变性的价值在于设计(它并不总是合适的 - 它只是一个很好的第一近似值),并且从统计的角度来看,设计偏好很少被争论,但是我们已经看到可变对象(日历,日期)已经变得非常糟糕,并且严重的替代(JodaTime,JSR-310)选择了不变性。


答案 2

在我看来,Java中不变性的最大优点是简单。如果对象的状态无法更改,则推理对象的状态将变得更加简单。当然,这在多线程环境中更为重要,但即使在简单的线性单线程程序中,它也可以使事情更容易理解。

有关更多示例,请参阅此页面