При какой ситуации объект не должен быть клонируемым? - PullRequest
2 голосов
/ 14 декабря 2011

Базовые интерфейсы коллекции (List, Map, Set) не расширяют интерфейс Cloneable. Это сделано для того, чтобы НЕ обеспечивать Клонируемость для конкретных реализаций.

Все классы коллекции реализуют интерфейс Cloneable, поэтому они все являются клонируемыми. Также Cloneable является интерфейсом маркера, означающим, что он сигнализирует компилятору / JVM выполнить дополнительную работу за занавесом , чтобы сделать этот объект Клонируемым.

Теперь мой вопрос: в каких ситуациях вы не хотите, чтобы ваш объект был клонируемым?

Ответы [ 4 ]

3 голосов
/ 14 декабря 2011

Синглтон - хороший случай.Другим является то, где у вас есть ссылка на что-то в системе, на которую вы должны иметь только ОДНУ ссылку.Например, поток.Наличие нескольких объектов, указывающих на один и тот же входной (или выходной) поток, может вызвать все виды проблем.

Если вы хотите использовать clone(), рассмотрите возможность создания конструктора копирования .*

2 голосов
/ 14 декабря 2011

Если ваш класс содержит огромный кусок данных, вы, возможно, не захотите, чтобы его клонировали, чтобы прекратить хранить несколько копий большого фрагмента данных.

1 голос
/ 14 декабря 2011

Я бы не хотел иметь клонируемых потоков: X Ни клонируемых классов ресурсов, ни сессионных компонентов

1 голос
/ 14 декабря 2011

Если бы вы реализовали шаблон Singleton, вы, вероятно, не хотели бы, чтобы полученный Singleton был клонируемым.

...