2011-12-07 60 views
1

我想知道,在Java中,我們如何創建一個常量對象(但不是不可變參數,因爲不變性是類的所有對象的一個​​特徵)?在Java中創建常量對象

第一:

final MyClass c = new MyClass(); 

創建一個恆定參考非恆定對象,因此我可以這樣做:

c.setData(100); 

第二:

String類是一類它的所有實例都應該是常量(又稱不可變對象)。我需要一種可以從常量對象和非常量對象創建的類型。


換句話說,如何授予一個類的某些對象的恆定性並將它從其他對象中移除。 (不需要將這個對象包裝在任何包裝中)。

+2

那麼因爲在Java中沒有'const'關鍵字,所以你已經發現'final'沒有做你想做的事情。簡而言之:不存在Java中的任何東西都與C++中的const正確性相關。 – Voo

+0

你知道爲什麼嗎? –

+0

由於const正確性會使語言複雜化,並且由於每個曾在C++中使用常量正確的代碼庫(必須調用舊版MS API)才能告訴您的每個人都有自己的一套問題。 java傢伙認爲值得一個權衡。 – Voo

回答

4

我想你想要的東西沿着C++中的const關鍵字的行,這使得一個否則可變類的實例不可變。但是,Java中不存在直接的等價物。

如果你控制這個類,你可以定義一個接口,只有當你需要一個「const」引用時纔會暴露這個接口並且使用這個接口 - 這不需要任何包裝,但是如果你需要爲許多課程做這個。

1

你可以做的最接近的是擴展的基類,所以他們扔java.lang.UnsupportedOperationException重寫其setter方法,這樣你可以創建一個從基類或不可改變的子類對象...

0

而只包含一個元素的枚舉呢?我認爲這非常接近他需要的東西

+0

你的意思與@ttt相同嗎?不,這不是我的意思! –