我已閱讀並heard了很多關於immutability好東西,所以我決定嘗試一下,在我的愛好項目之一。我將所有字段都聲明爲只讀,並且使所有通常會使對象發生變化的方法返回一個新的修改版本。如何以不可變的方式實現緩存?
它很好工作,直到我跑進入的情況下的方法應,由外部協議,返回有關的對象的特定信息,而不修改它,但在同一時間可以通過改變內部結構進行優化。特別是,tree path compression發生在union find algorithm中。
當用戶調用int find(int n)
,對象出現未修飾的外人。它在概念上表示同一個實體,但它的內部字段會發生變化以優化運行時間。
我如何在一個不變的方式實現這一點?
我要說的是,如果你在一個線程安全的方式突變,它由一個局外人的檢測不到的,那麼它可以被認爲是不可變的。 – Joe
@Joe但這樣我就必須自己保持線程安全。據我所知,不變性的美妙之處在於,我可以通過指定只讀關鍵字將其留給語言。 –
但你說過你想改變它。如果您不以線程安全的方式執行此操作,您將失去不可變類型(線程安全)的好處之一。 – Joe