Нашел такое решение:
stackoverflow.com/questions/869033/how-do-i-copy-a...
Оно не подошло. Не знаю как и почему, но все переменные в новом объекте становятся ссылками на переменные старого. Т.е. в нужном месте я создал копию объекта:
MyObject oldObject = new MyObject();
oldObject.someField = 1;
MyObject newObject = new MyObject(oldObject);
oldObject.someField = 2;
и переменная
someField у объекта
newObject тоже стала равняться 2.
Пробовал написать мегакостыль: в классе, который надо будет копировать, создал функцию
clone() и присвоил в ней всем переменным значения из существующего объекта:
public Pot clone() {
Pot newPot = new Pot();
Field[] fields = this.getClass().getDeclaredFields();
for (Field declaredField : fields) {
try {
if (declaredField.get(this) == null) {
newPot.setValue(declaredField.getName(), null);
} else {
newPot.setValue(declaredField.getName(), declaredField.get(this));
}
} catch (IllegalArgumentException | IllegalAccessException ex) {
Logger.getLogger(PotType.class.getName()).log(Level.SEVERE, null, ex);
}
}
return newPot;
}
public boolean setValue(String key, Object value) {
try {
if (!key.equals("initP")) {
Field declaredField = this.getClass().getField(key);
declaredField.set(this, value);
}
} catch (IllegalArgumentException | IllegalAccessException ex) {
Logger.getLogger(PotType.class.getName()).log(Level.SEVERE, null, ex);
return false;
} catch (NoSuchFieldException | SecurityException ex) {
Logger.getLogger(PotType.class.getName()).log(Level.SEVERE, null, ex);
return false;
}
return true;
}
MyObject oldObject = new MyObject();
oldObject.someField = 1;
MyObject newObject = oldObject.clone();
oldObject.someField = 2;
И опять все тоже самое! someField в новом объекте стало равно двум. Что за чертовщина? :) Прошу помощи.