我知道将final
对象字段用于 1)在构造函数中仅设置一次 2)对不可变对象的引用是一种很好的做法。
在构造函数中只设置一次但引用可变对象的字段呢?
目前,我更喜欢final
仅用于不可变对象引用,因为我可以快速查看哪些字段表示对象的可变状态(那些不是最终状态)。
更新:我知道 final 在技术上是如何工作的,特别是将可变对象的引用设置为 final 不会使对象不可变。如果我想最大限度地提高代码的清晰度和可理解性,这个问题是关于何时准确使用 final 的。
我知道将final
对象字段用于 1)在构造函数中仅设置一次 2)对不可变对象的引用是一种很好的做法。
在构造函数中只设置一次但引用可变对象的字段呢?
目前,我更喜欢final
仅用于不可变对象引用,因为我可以快速查看哪些字段表示对象的可变状态(那些不是最终状态)。
更新:我知道 final 在技术上是如何工作的,特别是将可变对象的引用设置为 final 不会使对象不可变。如果我想最大限度地提高代码的清晰度和可理解性,这个问题是关于何时准确使用 final 的。
这可能不是一个流行的观点,但我final
尽可能使用 - 如果您使用它来声明意图,那么可以通过注释来完成。如果您对此的反应是“评论不好”,那么您也应该重新考虑final
关键字的使用——因为它基本上是评论,对吧?
但是,final 关键字确实(几乎)向任何阅读代码的人保证该变量不会在任何地方重置(当然忽略反射......) - 这有时是一件有用的事情。
您可能还对 Jon 对这个问题的回答感兴趣
编辑:对不起,我应该澄清“尽可能”适用于字段 - 而不是类、方法等,因为那会很奇怪。
即使您声明了变量final
,引用的对象仍然是可变的。因此,如果这是您要避免的,那么它将不起作用(我的意思是使引用的对象不可变)