【发布时间】:2013-07-17 14:49:56
【问题描述】:
我按照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:在重写 clone 方法并将类 Route 实现为 Cloneable 后,我遇到了同样的问题。
-
@KlausosKlausos 也有可能,一些搜索显示当前的共识是avoid clone
标签: java clone copy-constructor