为什么clone()无法按预期工作?

亚历山德鲁·巴巴罗西(Alexandru Barbarosie)

在Java中具有以下代码

public Polynomial multiply(Polynomial aPolynomial){
    Polynomial ret = new Polynomial();
    for (Tuple i: this.pol){
        Polynomial temp = aPolynomial.clone();
        System.out.print(temp);
        for (Tuple j: temp.pol){
            j.setCoef(j.getCoef() * i.getCoef());
            j.setPower(j.getPower() + i.getPower());
        }
        ret = ret.add(temp).clone();
    }       
    return ret;
}

我得到的输出System.out.print(temp)始终是不同的值。这意味着aPolynomial在运行时某个地方会更改get。

更改Polynomial temp = aPolynomial.clone();为:

LinkedList<Tuple> list1 = (LinkedList<Tuple>) aPolynomial.pol.clone();
Polynomial temp = new Polynomial(list1);

System.out.print(temp)对于循环的每次运行也有所不同这也无济于事

我的错误在哪里?

编辑:

public Polynomial clone() {
    try {
        return (Polynomial)super.clone();
    } catch (CloneNotSupportedException e) {
        e.printStackTrace();
    }
    return null;
}

打印hashCode()tempaPolynomial确实导致两个不同的值。

aPolynomialhashCodefor循环的每次运行中都具有相同的功能

评论中某些问题的答案:

因为Polynomial它不会从任何地方继承,就我而言,我super.clone()会提到Object

我有自己的toString方法。

复仇女神X00

我相信您遇到的问题是:您已验证temp的克隆aPolynomial实际上是一个单独的对象。但是您在该对象中使用的值在参考中temp.pol在clone方法期间,该引用将被复制到新Polynomial实例,以便两者aPolynomialtemp使用其pol成员引用同一对象

最简单的解决方案是实现自定义clone()方法,在此方法中,您还可以克隆pol对的新实例引用Polynomial

类似于以下内容:

public Polynomial clone() {
    try {
        Polynomial p = (Polynomial)super.clone();
        p.pol = this.pol.clone();
        return p;
    } catch (CloneNotSupportedException e) {
        e.printStackTrace();
    }
    return null;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么clone()无法按预期工作?

来自分类Dev

为什么diff无法按预期工作?

来自分类Dev

为什么_.isEqualWith()无法按预期工作?

来自分类Dev

为什么setSlideCount无法按预期工作?

来自分类Dev

为什么umask无法按预期工作?

来自分类Dev

为什么按位OR和AND逻辑无法按预期工作?

来自分类Dev

为什么IntelliSense在foreach循环中无法按预期工作?

来自分类Dev

为什么Android数据绑定库无法按预期工作?

来自分类Dev

为什么此同步方法无法按预期工作?

来自分类Dev

为什么Nokogiri的xpath无法按预期工作?

来自分类Dev

为什么递归中的std :: ofstream无法按预期工作?

来自分类Dev

为什么DateTime :: sub无法按预期工作?

来自分类Dev

为什么asyncio.Queue无法按预期工作?

来自分类Dev

为什么此验证代码无法按预期工作?

来自分类Dev

为什么项目集无法按预期工作?

来自分类Dev

为什么system(“ clear”)命令无法按预期方式工作?

来自分类Dev

为什么模拟补丁无法按预期工作?

来自分类Dev

为什么导航器pushNamedAndRemoveUntil无法按预期工作?

来自分类Dev

为什么taskinfo语法文件无法按预期工作?

来自分类Dev

为什么.on()无法在jquery中按预期工作?

来自分类Dev

为什么我的hamcrest“包含”无法按预期工作?

来自分类Dev

为什么对整数列执行ORDER BY无法按预期工作

来自分类Dev

为什么jQuery插件中的“ this”无法按预期工作?

来自分类Dev

为什么此同步方法无法按预期工作?

来自分类Dev

为什么xsl:何时无法按预期工作?

来自分类Dev

为什么Kivy的布局都无法按预期工作?

来自分类Dev

为什么此软链接无法按预期工作?

来自分类Dev

为什么Spring @Configuration类继承无法按预期工作?

来自分类Dev

为什么此命令无法按我预期的那样工作?

Related 相关文章

  1. 1

    为什么clone()无法按预期工作?

  2. 2

    为什么diff无法按预期工作?

  3. 3

    为什么_.isEqualWith()无法按预期工作?

  4. 4

    为什么setSlideCount无法按预期工作?

  5. 5

    为什么umask无法按预期工作?

  6. 6

    为什么按位OR和AND逻辑无法按预期工作?

  7. 7

    为什么IntelliSense在foreach循环中无法按预期工作?

  8. 8

    为什么Android数据绑定库无法按预期工作?

  9. 9

    为什么此同步方法无法按预期工作?

  10. 10

    为什么Nokogiri的xpath无法按预期工作?

  11. 11

    为什么递归中的std :: ofstream无法按预期工作?

  12. 12

    为什么DateTime :: sub无法按预期工作?

  13. 13

    为什么asyncio.Queue无法按预期工作?

  14. 14

    为什么此验证代码无法按预期工作?

  15. 15

    为什么项目集无法按预期工作?

  16. 16

    为什么system(“ clear”)命令无法按预期方式工作?

  17. 17

    为什么模拟补丁无法按预期工作?

  18. 18

    为什么导航器pushNamedAndRemoveUntil无法按预期工作?

  19. 19

    为什么taskinfo语法文件无法按预期工作?

  20. 20

    为什么.on()无法在jquery中按预期工作?

  21. 21

    为什么我的hamcrest“包含”无法按预期工作?

  22. 22

    为什么对整数列执行ORDER BY无法按预期工作

  23. 23

    为什么jQuery插件中的“ this”无法按预期工作?

  24. 24

    为什么此同步方法无法按预期工作?

  25. 25

    为什么xsl:何时无法按预期工作?

  26. 26

    为什么Kivy的布局都无法按预期工作?

  27. 27

    为什么此软链接无法按预期工作?

  28. 28

    为什么Spring @Configuration类继承无法按预期工作?

  29. 29

    为什么此命令无法按我预期的那样工作?

热门标签

归档