I'm trying to make a deep copy of an object, including a GregorianCalendar instance. I'm always wary of using clone() and it doesn't seem to have been overridden here, so I'm just doing the copy field by field. Ideally, there'd be a copy constructor, which I could use like so:
GregorianCalendar newCalendar = new GregorianCalendar(oldCalendar);
Unfortunately I can't find any such functionality in the API and am stuck trying to figure out which fields I need to get an exact copy. So, to make a copy of one of these calendars, how would you do it? Am I missing some simple shortcut here?
java.util.Calendar has overridden clone() which is working, so use it. Furthermore, Calendar doesn't have deep data hierarchy - its data are mainly ints.
To extend the answer, you can call SerializationUtils.clone(..) (from commons-lang) on any object which makes a deep copy, if the whole data hierarchy implements Serializable
Specifically, the quickest line of code to copy a Calendar is:
GregorianCalendar newCalendar = (Calendar)(oldCalendar.clone());
Uh, clone() sucks.
Is it that hard? You only have to set 3 things, I believe, the time, the time zone, and the locale. All those fields have getters and setters. Make a quite utility method to return a copy?
来源:https://stackoverflow.com/questions/2499113/quickest-way-to-clone-a-gregoriancalendar