Я реализовал конструктор копирования, как описано here. Но все же проблема в том, что когда я обновляю route_copy
, то такое же обновление применяется к route
. Итак, я не понимаю, что не так в моем коде?Конструктор копирования создает зависимую копию
public class Route implements Comparable<Route> {
private List<Site> sites;
public Route()
{
sites = new ArrayList<Site>();
}
public Route(List<Site> sites)
{
this.sites = sites;
}
/**
* Copy constructor
*/
public Route(Route r) {
this(r.sites);
}
public void deleteSite(Site s) {
this.sites.remove(s);
}
}
public processData(Route route)
{
Route route_copy = new Route(route);
Site s = selectSite(route_copy);
route_copy.deleteSite(s); // !!! now 'route' does not contain an element 's'
}
Ваш «конструктор копирования» не делает копию списка ввода. Попробуйте что-то вроде –
Java не поддерживает конструкторы копирования в той же степени, что и C++, то есть автоматический вызов. Не было бы более целесообразным переопределять 'clone()'? – DuncanACoulter
@DuncanACoulter: У меня была такая же проблема после переопределения метода клонирования и реализации класса Route as Cloneable. –