Я читаю о конкретных рекомендациях, которые необходимо соблюдать при создании Неизменяемого класса в Effective Java.Лучший дизайн для создания Неизменяемого класса
Я читал, что в методе Неизменяемого класса нельзя допускать переопределение, иначе переопределенный метод может изменить поведение метода. Ниже дизайн подходов доступен в Java, чтобы решить эту проблему: -
Мы можем отметить класс окончательного, но согласно моему пониманию, он имеет один недостаток, что делает класс нерастяжимым.
Во-вторых, чтобы сделать индивидуальные методы окончательными, но я не могу получить другой недостаток, кроме того, что мы должны индивидуально отмечать каждый метод как окончательный, чтобы предотвратить переопределение.
В соответствии с книгой лучший подход заключается в том, чтобы сделать конструктор частным или приватным пакетом и предоставить общедоступный статический заводский метод для создания объекта.
Мой вопрос: Даже если мы включаем частные или конструктор по умолчанию в классе, он не может быть продлен больше в одном пакете (в другой упаковке, в случае пакета-частного конструктора), он имеет те же проблемы, которые первый был. Как он считается лучшим подходом, чем предыдущие?
Вы, конечно же, не можете продлить неизменяемый класс. Это одно из ключевых требований к неизменному классу. –
Вы можете увидеть примеры для подхода, делающего конструктор частным в классах-оболочках примитивного типа: 'Integer',' Double' и т. Д. При неизменности объект часто рассматривается как значение. Таким образом, не важно, представлено ли одно и то же значение только одним объектом или (потенциально) несколькими объектами. Поэтому предоставляется статический заводский метод, который может возвращать один и тот же объект для одного и того же значения. – Seelenvirtuose
Последний класс, например. 'java.lang.String' является **' final' ** и не может ни расширяться, ни модифицироваться после создания экземпляра. –