程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了副本构造函数创建依赖副本大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决副本构造函数创建依赖副本?

开发过程中遇到副本构造函数创建依赖副本的问题如何解决?下面主要结合日常开发的经验,给出你关于副本构造函数创建依赖副本的解决方法建议,希望对你解决副本构造函数创建依赖副本有所启发或帮助;

在复制构造函数中,您只是在进行浅表复制,而您需要进行深表复制:

public Route(Route r) {
    this(r.sites);
}

在这里,您仍在复制的引用,该引用List仍指向sameArrayList。您也应该对其进行修改以创建列表的副本。可能还需要像下面这样在arrayList中创建元素的副本:

public Route(Route r) {
    List<Site> newSites = new ArrayList<Site>();

    for (Site obj: r.sites) {
        // Add copy of obj to the newSites
        // So you need yet another copy constructor in 'Site' class.
    }

    this.sites = newSites;
}

解决方法

我实现了此处描述的副本构造函数。但是问题仍然是,当我更新时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'
}

大佬总结

以上是大佬教程为你收集整理的副本构造函数创建依赖副本全部内容,希望文章能够帮你解决副本构造函数创建依赖副本所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。