Вот мое понимание с немного прибегая к помощи и найти this article. Эффективно неизмеримый объект - это объект, который содержит поля, которые могут быть мутированы, но он не позволяет чему-либо мутировать эти поля, потому что он никогда не дает вам ссылки на них. Например, скажем, вы создаете класс с ArrayList
. ArrayList
s изменяемы, но если ваш класс всегда возвращает копию массива ArrayList, а все остальное в вашем классе является неизменным, то ваш класс стал эффективно неизменяемым: не существует способа изменить состояние экземпляра вашего класса.
Сообщение в блоге дает это в качестве примера эффективна неизменного класса:
import java.awt.*;
public class Line {
private final Point start;
private final Point end;
public Line(final Point start, final Point end) {
this.start = new Point(start);
this.end = new Point(end);
}
public void draw() {
//...
}
public Point getStart() {
return new Point(start);
}
public Point getEnd() {
return new Point(end);
}
}
Point
объектов изменчивы, но это нормально, потому что этот класс не дает никому прямую ссылку на это экземпляров Точечных , Вместо этого он возвращает новый экземпляр с тем же значением в нем. Таким образом, никто не может изменить состояние класса Line
. Это делает класс Line
эффектно неизменным.
Итак, как это отличается от действительно неизменяемого класса? У действительно неизменяемого класса есть поля, которые также неизменны. Позволяет себе представить, что Line
действительно непоколебимо. Для этого нам также придется вообразить, что Point
неизменен. Выполнение этих предположений, метод getStart()
мог бы быть в состоянии записать так:
public Point getStart() {
return start;
}
См. [Эффективные объекты неизменяемости] (http://stackoverflow.com/questions/8707426/do-effectively-immutable-objects-make-sense), в котором также упоминается книга, к которой вы обращаетесь. – Bobulous
См. Также [Должны ли все свойства неизменяемого объекта быть окончательными?] (Http://stackoverflow.com/questions/16061030/must-all-properties-of-an-immutable-object-be-final) – assylias