0
的Java一成不變的類可以通過聲明它由不變性VS線程安全
- 聲明級決賽中被創建。
- 聲明所有成員字段最終。
- 沒有安裝程序。
如果沒有setter和class聲明爲final爲什麼我們應該設置成員final?
另外,我可以說,如果一個類是不可變的意味着它是線程安全的?
的Java一成不變的類可以通過聲明它由不變性VS線程安全
如果沒有setter和class聲明爲final爲什麼我們應該設置成員final?
另外,我可以說,如果一個類是不可變的意味着它是線程安全的?
如果沒有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
上面的代碼將無法編譯。
我可以說,如果一個類不可變意味着它是線程安全的?
不是必須的,但在許多情況下是的。
可能重複[不可變對象是線程安全的,但爲什麼?](http://stackoverflow.com/questions/9303532/immutable-objects-are-thread-safe-but-why) – Dez
。如果沒有setters和class聲明爲final爲什麼我們應該設置成員final?這是我的主要問題 – aspxsushil