我有 C++ 背景,对 Java 的不可变特性感到好奇。函数的返回值可以指定为const吗? (表示返回值不可修改)
另外,为了加分,在 C++ 中,函数定义可以后缀为 const,以声明该函数不会修改任何类级别值。这在Java中也可能吗? (这意味着根据定义,函数将无法在内部更改其类状态)
非常感谢!
不,Java 的final
与 C++ 有很大不同const
。您不能做您所要求的任何事情。
要使对象不可变,您或多或少需要强制执行它(而不是像 C++ 中那样寻求编译器的帮助)。从http://docs.oracle.com/javase/tutorial/essential/concurrency/imstrat.html http://docs.oracle.com/javase/tutorial/essential/concurrency/imstrat.html:
以下规则定义了创建不可变对象的简单策略。 ...
- 不要提供“setter”方法——修改字段或字段引用的对象的方法。
- 使所有字段
final
and private
.
- 不允许子类重写方法。最简单的方法是将类声明为
final
。更复杂的方法
是让构造函数private
并在工厂中构造实例
方法。
- If the instance fields include references to mutable objects, don't allow those objects to be changed:
- 不要提供修改可变对象的方法。
- 不要共享对可变对象的引用。切勿存储对传递给构造函数的外部可变对象的引用;如果
必要时,创建副本并存储对副本的引用。
同样,创建内部可变对象的副本
避免在方法中返回原件是必要的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)