如何在Java中创建常量对象?
如何创建对常量对象的引用
final Myclass obj = new Myclass();
不起作用,它说obj(参考)不应该被重新分配,但我们仍然可以更改参考的对象
我希望确保对象本身在构建后不会发生更改
你可以在下面搜索框中键入要查询的问题!
如何创建对常量对象的引用
final Myclass obj = new Myclass();
不起作用,它说obj(参考)不应该被重新分配,但我们仍然可以更改参考的对象
我希望确保对象本身在构建后不会发生更改
# 1 楼答案
是的,你好像忘了设置字体
这意味着obj只能分配一次。java没有C++类的const关键字。如果MyClass未声明为final(final class MyClass{…})它仍然可以改变
# 2 楼答案
你混合了两种东西:最终的和不变的
变量可以是final,因此初始化后不能更改它的值(或对象引用)(当然可以更改引用的对象属性)
对象可以是不可变的(不是关键字而是属性),因此在创建后不能更改其值。字符串就是一个很好的例子-不能在字符串对象内更改backing char[]
# 3 楼答案
只要让它不可变(就像} 和consorts)
String
一样)。或者将其包装在另一个对象中,该对象限制对所讨论对象的变体的访问(如^{# 4 楼答案
我认为Java中没有任何内置关键字可以实现这一点。即使引用是常量/最终的,对象的内部仍然可以更改
最好的选择是拥有类的只读实现版本
您可以在此处阅读更多信息:http://en.wikipedia.org/wiki/Const-correctness#final_in_Java
# 5 楼答案
你想要的是一个Immutable Object。Java中没有任何关键字可以立即使对象不可变。您必须设计对象的逻辑,使其状态无法更改。正如BalusC所说,您可以将其包装在另一个对象中,从而限制对其变体的访问
# 6 楼答案
在Java中,不可变类通常意味着它没有“setter”,任何可以通过“getter”访问的字段也应该是不可变的。为了让数据进入类以启动,您需要有一个将值作为参数的构造函数: