2015-09-04 30 views
0

非最終參數或返回的對象可以使對象變爲可變嗎?不可改變的最終參數和返回

這有什麼區別,通過改變這樣的:

public final class MyImmutableClass { 

public final MyObject doStuff(final SomeObject someObject) { 
    ... 
} 

} 

這樣:

public final class MyImmutableClass { 

public MyObject doStuff(SomeObject someObject) { 
    ... 
} 

} 

當目標是使MyImmutableClass真正一成不變的。

應用更改後,MyImmutableClass仍被認爲是不可變的?如果不是,通過進行更改可以更改哪種狀態?

+2

IIRC製備類最終不會影響可變性。這只是意味着該類不能被分類 –

+1

http://stackoverflow.com/questions/2236599/final-keyword-in-method-parameters可能的重複? – Sweeper

回答

3

首先一個永遠不會不可變的,類的一個實例可能是。接下來,

public final MyObject doStuff(final SomeObject someObject) {

在這裏,你不能改變參考someObject指向的SomeObject方法內的一些其他情況。這保證你總是使用調用者傳遞的參數。

接着,在final方法簽名確保它不能被重寫(如果類本身被標記爲final這是多餘的。)