W książce Java Concurrency In Practice wyjaśnia zalety "skutecznie niezmiennych" obiektów w porównaniu z zmiennymi obiektami w sposób współbieżny. Nie wyjaśnia jednak, jaką przewagę nad "niezmiennymi" obiektami stanowiłyby niezmienne obiekty.Czy skutecznie niezmienne obiekty mają sens?
I nie rozumiem: nie możesz zawsze zbudować naprawdę niezmienny obiekt w chwili, gdy zdecydujesz się opublikować bezpiecznie "skutecznie niezmienny" obiekt? (zamiast robić "bezpieczną publikację" zbudowałeś naprawdę niezmienny obiekt i to wszystko)
Kiedy projektuję klasy, nie widzę przypadków, w których nie zawsze mógłbym zbudować obiekt naprawdę niezmienny (w razie potrzeby za pomocą delegacji itp. do budowania innych zapakowanych przedmiotów, oczywiście naprawdę niemożliwa do zaakceptowania) w momencie, gdy zdecyduję się "bezpiecznie opublikować".
Czy obiekt "skutecznie niemodyfikowalny" i ich "bezpieczna publikacja" jest tylko przypadkiem złego projektu lub słabych interfejsów API?
Gdzie byłbyś zmuszony do używania obiektu niezmiennie efektywnego i musiałbyś go bezpiecznie opublikować, skoro nie mógłbyś zbudować znacznie lepszego, naprawdę niezmiennego obiektu?
Czy jest jakikolwiek przykład tego podejścia? – user77115