Java实现克隆,泛型类。

时间:2010-02-13 23:11:47

标签: java clone equals

我有一个实现2Dtable的类。表中的元素是通用的。表格存储如下:

public Object[][] list;

问题是在这上面调用克隆显然不起作用。请注意,我的testcase初始化表以存储正常的整数。

Tabell2D<Integer> en = new Tabell2D<Integer>(5,5);
        en.sett(0, 0, 55);
        Tabell2D<Integer> to = en.clone();
        to.sett(0, 0, 11);
        assertTrue(en.equals(to)); 

我在这里制作一张桌子。改变它,克隆它。更改克隆,并进行比较。 克隆人显然已经改变了。即使这样,这个断言真的也是如此。

等值方法由eclipse生成:

public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Tabell2D other = (Tabell2D) obj;
        if (bredde == null) {
            if (other.bredde != null)
                return false;
        } else if (!bredde.equals(other.bredde))
            return false;
        if (høyde == null) {
            if (other.høyde != null)
                return false;
        } else if (!høyde.equals(other.høyde))
            return false;
        if (!Arrays.equals(liste, other.liste))
            return false;
        return true;
    }

我认为问题在于列表变量的比较相等,或者问题出在克隆方法中。 克隆方法:

public Tabell2D<E> clone(){
        Tabell2D<E> nyTab = new Tabell2D<E>(this.bredde,this.bredde);
        nyTab.liste = liste.clone(); 
        return nyTab; 
    }

2 个答案:

答案 0 :(得分:2)

我认为问题的根源在于克隆二维数组并不深入。如果你想要一个'liste'的深层副本,你需要编写自己的代码来复制每一行(或列,具体取决于你如何看待它)。

答案 1 :(得分:-2)

克隆应该返回Object。你的“克隆”并没有覆盖正常的克隆。

另外,我不知道克隆数组会做一个深层复制。你可能最好创建一个新数组并分配元素。