У меня есть следующее.Копировать объект любого типа
public static <T> T someMethod(T originalObject) {
T modifiedObject = /* copy of original object (HOW DO YOU DO THIS?) */
/* Some logic that modifies the object. */
...
return modifiedObject; // without changing original Object
}
Вопрос в том, как создать копию типа T, если вы не знаете, какой тип T может быть?
REVISION - чтобы быть более ясным, я просто вставлю свой код.
public class ObjectMerger {
public static <T> T merge(T original, T patch) throws IllegalArgumentException, IllegalAccessException {
Object mergedObject = original // TODO: implement a way to copy original
Field[] inheritedFields = patch.getClass().getFields();
Field[] memberFields = patch.getClass().getDeclaredFields();
Field[] allFields = (Field[]) ArrayUtils.addAll(inheritedFields, memberFields);
for (Field field : allFields) {
Boolean originalAccessibility = field.isAccessible();
field.setAccessible(true);
Object fieldValue = field.get(patch);
if (fieldValue != null) {
Boolean fieldIsFinal = Modifier.isFinal(field.getModifiers());
if (!fieldIsFinal) {
field.set(mergedObject, fieldValue);
}
}
field.setAccessible(originalAccessibility);
}
return mergedObject;
}
}
Примечание: Я попытался сказать, что T extends Cloneable и это не выход. Я считаю, что реализация Cloneable не гарантирует, что клон будет виден.
ПРИМЕЧАНИЕ: ПРИМЕЧАНИЕ DUPLICATE!
Для тех, кто отмечает это как дубликат, пожалуйста, прочитайте вопрос. Это запрашивает способ дублирования объекта неизвестного типа. В любом случае, из того, что я понял, это невозможно. Спасибо всем за ваш вклад.
Вы пытаетесь клонировать объект? –
Не могли бы вы объяснить, почему вы это делаете? Чтобы мы могли предложить вам правильный способ сделать это. –
Я пересмотрел свой вопрос. Надеюсь, это станет немного более ясным. Благодарю. –