Самый быстрый способ клонирования GregorianCalendar?
Я пытаюсь сделать глубокую копию объекта, включая экземпляр GregorianCalendar
. Я всегда опасаюсь использовать clone()
, и он, похоже, не был переопределен здесь, поэтому я просто делаю поле для копирования по полю. В идеале, был бы конструктор копирования, который я мог бы использовать так:
GregorianCalendar newCalendar = new GregorianCalendar(oldCalendar);
К сожалению, я не могу найти такую функциональность в API и не пытаюсь выяснить, какие поля мне нужны, чтобы получить точную копию. Итак, чтобы сделать копию одного из этих календарей, как бы вы это сделали? Я пропустил какой-то простой ярлык здесь?
Ответы
Ответ 1
java.util.Calendar
имеет переопределенный clone()
, который работает, поэтому используйте его. Кроме того, Calendar
не имеет глубокой иерархии данных - его данные в основном int
s.
Чтобы продлить ответ, вы можете вызвать SerializationUtils.clone(..)
(из commons-lang) на любой объект, который делает глубокую копию, если целая иерархия данных реализует Serializable
Ответ 2
В частности, самая быстрая строка кода для копирования Календаря:
GregorianCalendar newCalendar = (Calendar)(oldCalendar.clone());
Ответ 3
Uh, clone()
отстой.
Это так сложно? Я полагаю, вам нужно установить только 3 вещи, время, часовой пояс и локаль. Все эти поля имеют геттеры и сеттеры. Сделать метод полезности для возврата копии?