2015-04-24 23 views

Odpowiedz

12

"Niepowodzenie awarii" Blocha oznacza, że ​​jeśli metoda wyrzuci wyjątek, obiekt powinien być nadal możliwy do wykorzystania. Zasadniczo obiekt powinien znajdować się w tym samym stanie, w jakim znajdował się przed wywołaniem metody.

W przypadku obiektu niezmiennego zyskuje się to po prostu dlatego, że jest niezmienny. Nie ma operacji, która zmienia stan obiektu. Wszystkie metody obiektu mogą zrobić, to tworzyć nowe obiekty, które pochodzą z oryginalnego obiektu.

Na przykład String ma metodę substring(int). Nie zmienia niczego w oryginalnym łańcuchu - tworzy nowy obiekt, którego treść jest kopią części oryginalnego łańcucha, który chciałeś. Jeśli zgłasza wyjątek, to po prostu nie otrzymasz nowego obiektu - ale oryginalny Ciąg nigdy się nie zmienił. W kodzie substring() nie ma kodu, który modyfikuje oryginalny kod String, a zatem jest niepodzielny.

Atomowość porażenia można uzyskać również w przypadku obiektów zmiennych, ale należy zwrócić na to szczególną uwagę, podczas gdy w obiektach niezmiennych wynika to po prostu z troski, którą zaprojektowałeś, aby była niezmienna.