В настоящее время у меня есть два класса, Вселенная и Мир.Класс Universe имеет поле ArrayList, в котором перечислены все миры этой вселенной.Я хочу иметь возможность скопировать вселенную, а затем добавить в нее мир, чтобы у меня было два объекта вселенной, один из которых на один мир меньше другого.
Это класс Universe:
public class Universe {
private ArrayList<World> worlds;
private int worldCount;
private boolean reflex;
private boolean trans;
private boolean symm;
private boolean hereditary;
public Universe(ArrayList<World> worlds, int worldCount, boolean reflex, boolean trans, boolean symm, boolean hereditary) {
this.worlds = worlds;
this.worldCount = worldCount;
this.trans = trans;
this.reflex = reflex;
this.symm = symm;
this.hereditary = hereditary;
if (this.symm && this.trans) { // symmetry and transitivty makes reflexivity
this.reflex = true;
}
}
public Universe(Universe u) { // creates a shallow copy of the other universe
this(u.getWorlds(), u.getWorldCount(), u.getReflex(), u.getTrans(), u.getSymm(), u.getHereditary());
}
@Override
public Object clone() {
Universe u = null;
try {
u = (Universe) super.clone();
}catch(CloneNotSupportedException e) {
u = new Universe(this.getWorlds(), this.getWorldCount(), this.getReflex(), this.getTrans(), this.getSymm(), this.getHereditary());
}
return u;
}
}
И класс World:
public class World {
private Universe parentUniverse;
private String worldName;
private ArrayList<Relation> relations;
private ArrayList<ExprStr> expressions;
public World(Universe u) {
this.parentUniverse = u;
int count = u.getWorldCount();
String countStr = Integer.toString(count);
this.worldName = "";
this.worldName += 'w' + countStr;
this.relations = new ArrayList<Relation>();
if (this.parentUniverse.getReflex()) {
this.addRelation(this, true, true);
}
this.expressions = new ArrayList<ExprStr>();
}
}
Класс World называет себя в своей собственной вселенной, и метод toString возвращаетэто имяМетод toString для Universe возвращает список всех миров.
У меня есть код:
Universe y = new Universe();
World d = new World(y);
y.addWorld(d);
Universe x = (Universe) y.clone(); // have to type cast to use clone()
World d1 = new World(x);
x.addWorld(d1);
System.out.println(y);
System.out.println(x);
Но вывод:
[w0, w1]
[w0, w1]
Даже если, еслиГлубоко скопировано правильно, я ожидал, что в одной вселенной будет больше миров, чем в другом.
Нужно ли мне также копировать класс World?Что я делаю неправильно?
Спасибо, куча!:)