Object.clone() по умолчанию выполняет поверхностное копирование: примитивы/неизменяемые объекты копируются правильно, но ссылочные поля (например, List) в конечном итоге становятся общими для оригинала и клона. Правильный clone() для класса с изменяемыми ссылочными полями должен явно глубоко копировать эти поля, иначе изменение списка одного экземпляра автоматически повлияет и на «независимый» клон.
Пример
@Aspect@ComponentpublicclassLoggingAspect {
@Around("@annotation(com.acme.Loggable)")publicObjectlogExecutionTime(ProceedingJoinPoint pjp)throws Throwable {
longstart= System.currentTimeMillis();
Objectresult= pjp.proceed(); // invokes the real method
log.info("{} took {}ms", pjp.getSignature(), System.currentTimeMillis() - start);
return result;
}
}
Итог
Object.clone() по умолчанию выполняет поверхностное копирование: примитивы/неизменяемые объекты копируются правильно, но ссылаются на поля (например,
В Java `Object.clone()`, в чем разница между поверхностной копией и… · Sobeso