【发布时间】:2015-03-17 11:51:35
【问题描述】:
public class Point {
private double x;
private double y;
Point (double x, double y)
{ this.x = x; this.y = y; }
double getX() { return x; }
double getY() { return y; } }
上述类中的对象是不可变的吗?解释。 我很困惑,因为 没有设置器,所以没有任何东西可以修改对象 但 它不应该包含最终变量或最终类。
如果类得到扩展,它可能会添加额外的非不可变字段,或者可以重写方法以每次返回不同的值。这不会使类不是不可变的吗?
【问题讨论】:
-
“对象在”,还是“对象”?
-
在某些讨论中,“不可变”意味着所有字段都是
final,并且像您这样的类具有非最终字段但从未更改的类称为“有效不可变”。类的构造函数与其他线程中调用的方法的同步方式存在一些差异,具体取决于该类是真正可变的还是仅有效不可变的。
标签: java multithreading class immutability mutable