Java: Вопросы по методу клонирования - PullRequest
8 голосов
/ 09 февраля 2012

Я получил их в интервью.

  1. Нужно ли нам позаботиться о методе клонирования в параллельной среде?Можем ли мы синхронизировать метод клонирования?

  2. Имеет ли смысл использовать метод клонирования в одноэлементных классах?

Я не сделалполучить убедительные ответы на это во время интервью.

Ответы [ 2 ]

2 голосов
/ 09 февраля 2012
  1. Вероятно, да, 99,99% случаев, но вам просто нужно думать о клонировании, как о любых других методах вашего класса, и синхронизировать его при необходимости в зависимости от вашего конкретного контекста. Нет ничего плохого в синхронизации метода, который не синхронизирован в его базовом классе. С другой стороны, несинхронизация метода при переопределении синхронизированного, вероятно, является ошибкой , даже если код компилируется нормально и предупреждения не выдаются ...

  2. Убедительным ответом, вероятно, будет НЕТ с парой слов о шаблоне проектирования синглтона.

1 голос
/ 09 февраля 2012
  1. Если вы клонируете объект, который может быть изменен в других потоках, то вам, вероятно, потребуется получить какую-то блокировку [read], как если бы вы выполняли над ней какие-либо другие операции.Теоретически вам понадобится блокировка нового объекта, если он может быть подвержен небезопасной публикации (я предлагаю не публиковать изменяемый объект небезопасно!).

  2. Это не будет одноэлементный файл, еслиВы могли бы сделать еще один пример этого (существует моностатический антипаттерн, похожий на одноэлементный антипаттерн, только хуже и может включать несколько объектов без какой-либо четкой цели).Я полагаю, если бы вы делали подклассы некоторого класса, который реализовал Cloneable, вы хотите переопределить clone, и либо можно сгенерировать CloneNotSupportedException, либо иначе вернуть this.

...