Что мешает сделать Cloneable изменяемым объектом, таким как StringBuilder? - PullRequest
0 голосов
/ 03 января 2019

Это плохая идея сделать неизменным объект Cloneable. Вот почему String не является клонируемым. Неизменные BigInteger и BigDecimal также не Cloneable.

Но изменяемые StringBuilder и StringBuffer не могут быть клонированы!

В чем причина такого решения?

Да, я могу использовать «конструктор копирования» new StringBuilder(CharSequence seq), но Каков принцип / обоснование дизайна для предоставления конструктора копирования и запрета клонирования ?

1 Ответ

0 голосов
/ 03 января 2019

Поскольку Cloneable было ошибкой с самого начала.

  • Трудно использовать интерфейс (вам нужно привести результат обратно)
  • Нечистая семантика (это будет глубокий клон илимелкий клон?)
  • Сложно настроить

Все это делало этот интерфейс непопулярным.

Так что ответ: никто не хочет его .

РЕДАКТИРОВАТЬ

Если вы хотите знать, почему будет плохой идеей реализовать Cloneable в StringBuilder: Cloneable иметь мелкую копиюсемантический, что затрудняет поддержание инвариантов (это общая проблема с мелкой копией изменяемых объектов).Например, в toString есть оптимизация, которая будет нарушена, если мы ее клонируем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...