可以通过
声明来创建Java不可变类如果没有setter并且class被声明为final,为什么我们应该将成员设置为final?
而且,我可以说,如果一个类是不可变的意味着它是线程安全的吗?
答案 0 :(得分:1)
如果没有setter并且class被声明为final,为什么我们应该将成员设置为final?
避免内部修改内部。以下课程从外部看起来是不可变的,我们希望调用getBar()
是免费的副作用(这意味着每当及时调用此方法时,我们希望相同结果,也称为确定性)。但事实并非如此,因为调用doThing()
会对bar
产生副作用。
public final class Foo {
private int bar;
public Foo(int bar) {
this.bar = bar;
}
public int getBar() {
return bar;
}
public void doThing() {
//do some things
//increment bar for some reason
bar++;
}
}
如果bar
为final
,则上述代码无法编译。
我可以说,如果一个类是Immutable意味着它是线程安全的吗?
没有必要,但在许多情况下是的。