import org.apache.commons.lang3.reflect.FieldUtils;
public class ObjectCloneUtils {
public static <T> T cloneObject(T object) throws IllegalAccessException {
Class<?> objectClass = object.getClass();
T clonedObject;
try {
clonedObject = (T) objectClass.newInstance();
} catch (InstantiationException e) {
throw new RuntimeException("Failed to clone object: " + e.getMessage());
}
FieldUtils.getAllFieldsList(objectClass).forEach(field -> {
try {
FieldUtils.writeField(field, clonedObject, FieldUtils.readField(field, object, true), true);
} catch (IllegalAccessException e) {
throw new RuntimeException("Failed to clone object: " + e.getMessage());
}
});
return clonedObject;
}
public static void main(String[] args) {
Person person = new Person("John", 25);
Person clonedPerson;
try {
clonedPerson = ObjectCloneUtils.cloneObject(person);
System.out.println(clonedPerson);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
Maven:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
Gradle:
groovy
implementation 'org.apache.commons:commons-lang3:3.12.0'