2012-07-11 42 views

回答

3

final有助於實現一個不可變對象。不可變對象必須確保它擁有的任何對象本身是不可變的,或者至少不能公開可變。

有在Java中沒有不可改變皇家路徑(或以其他方式,我可以補充)。

4

對你最後一個問題的簡單回答是:它沒有。

除非有沒有辦法變異「B」的狀態,最終將獲得你什麼關於「一」的可變性。

這些是正交的概念,然而在一切可能的地方使用「最終」將幫助你實現目標不可改變,但它是沒有必要的,你也離不開誰。

0

我不是100%確定,但我認爲差異本質上是這樣的,使用final關鍵字只是保證你作爲程序員,變量會在執行過程中始終引用同一個對象。然而,沒有什麼能夠阻止對象本身以某種方式改變。

考慮以下僞代碼:final Car c = new BMW(Color.Green, new Milage(0));

的代碼,你可以不分配c到奧迪,或福特以後,但沒有限制「使用」您的BMW,以便它在路線milage增加你的程序。

1

製作領域final提供一個編譯時檢查一個被不修改到B.

參考雖然這不足以保證A的不變性,它是有幫助的。

防禦性拷貝可以防止外部修改b引用的可變對象。可以爲A構造函數接收的對象和A訪問器返回的對象創建防禦性副本。

0

對象是不可變的 - 意味着數據或在該對象中的變量瓦萊斯不能改變設置一次。

參考不可變 - 是指被指向該對象的變量是一個最終變量。

相關問題