Для сложных объектов и когда производительность незначительна, я использую библиотеку json, например gson
сериализовать объект в текст json, а затем десериализовать текст, чтобы получить новый объект.
gson, который на основе отражения будет работать в большинстве случаев, за исключением того, что поля transient
не будут скопированы и объекты с круговой ссылкой с причиной StackOverflowError
.
public static <T> T copy(T anObject, Class<T> classInfo) {
Gson gson = new GsonBuilder().create();
String text = gson.toJson(anObject);
T newObject = gson.fromJson(text, classInfo);
return newObject;
}
public static void main(String[] args) {
String originalObject = "hello";
String copiedObject = copy(originalObject, String.class);
}