Самый быстрый способ клонировать GregorianCalendar? - PullRequest
25 голосов
/ 23 марта 2010

Я пытаюсь сделать глубокую копию объекта, включая экземпляр GregorianCalendar. Я всегда настороженно отношусь к использованию clone(), и это, похоже, не было здесь переопределено, поэтому я просто делаю копирование поле за полем. В идеале, был бы конструктор копирования, который я мог бы использовать так:

GregorianCalendar newCalendar = new GregorianCalendar(oldCalendar);

К сожалению, я не могу найти такую ​​функцию в API, и застрял, пытаясь выяснить, какие поля мне нужны, чтобы получить точную копию. Итак, чтобы сделать копию одного из этих календарей, как бы вы это сделали? Я пропускаю какой-нибудь простой ярлык здесь?

Ответы [ 3 ]

37 голосов
/ 23 марта 2010

java.util.Calendar переопределил clone(), который работает, поэтому используйте его. Кроме того, Calendar не имеет глубокой иерархии данных - его данные в основном int с.

Чтобы расширить ответ, вы можете вызвать SerializationUtils.clone(..) (из commons-lang ) для любого объекта, который делает глубокую копию, если вся иерархия данных реализует Serializable

1 голос
/ 10 июня 2016

В частности, самая быстрая строка кода для копирования календаря:

GregorianCalendar newCalendar = (Calendar)(oldCalendar.clone());
0 голосов
/ 03 июня 2011

Э-э, clone() отстой.

Это так сложно? Я полагаю, вам нужно установить только 3 вещи: время, часовой пояс и локаль. Все эти поля имеют геттеры и сеттеры. Сделать довольно полезный метод для возврата копии?

...