usamos porque origen juliano gregoriano diferencias definicion calendario java calendar copy clone

java - porque - ¿La forma más rápida de clonar un calendario gregoriano?



origen del calendario (3)

Específicamente, la línea de código más rápida para copiar un calendario es:

GregorianCalendar newCalendar = (Calendar)(oldCalendar.clone());

Estoy intentando hacer una copia profunda de un objeto, incluida una instancia de GregorianCalendar . Siempre desconfío de usar clone() y no parece que se haya anulado aquí, así que simplemente estoy copiando campo por campo. Idealmente, habría un constructor de copia, que podría usar así:

GregorianCalendar newCalendar = new GregorianCalendar(oldCalendar);

Desafortunadamente, no puedo encontrar ninguna funcionalidad de este tipo en la API y estoy atascado tratando de averiguar qué campos necesito para obtener una copia exacta. Entonces, para hacer una copia de uno de estos calendarios, ¿cómo lo harías? ¿Me estoy perdiendo algún atajo simple aquí?


Uh, clone() apesta.

¿Es tan difícil? Solo tiene que configurar 3 cosas, creo, la hora, la zona horaria y la configuración regional. Todos esos campos tienen getters y setters. ¿Hacer un método bastante útil para devolver una copia?


java.util.Calendar ha sobrescrito clone() que está funcionando, así que úsalo. Además, Calendar no tiene una jerarquía de datos profunda, sus datos son principalmente int s.

Para ampliar la respuesta, puede llamar a SerializationUtils.clone(..) (de commons-lang ) en cualquier objeto que haga una copia profunda, si toda la jerarquía de datos se implementa. Serializable