我已经阅读并听说了很多关于不可变性的好处,所以我决定在我的一个兴趣项目中尝试它。我将所有字段声明为只读,并使通常会改变对象的所有方法返回一个新的修改版本。
这很好用,直到我遇到了一种情况:一个方法应该根据外部协议返回有关对象的某些信息而不修改它,但同时可以通过修改内部结构进行优化。特别是,在并查集算法中的树路径压缩中会发生这种情况。
当用户调用int find(int n)
时,对象对外人来说似乎没有被修改。从概念上讲,它代表同一实体,但其内部字段被改变以优化运行时间。
我如何以不可变的方式实现这一点?
Lazy<T>
),该属性实现了您的优化。 - Joe