Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > клонирование


Автор: ressac 15.3.2009, 14:19
есть класс X в нём реализован clone()

атрибуты

int[][] m:
int x

так вот, при клонировании, матрица не клонируется, если поменять m[0][0]=0 то в клоне объекта  m[0][0] тоже станет 0

Автор: batigoal 15.3.2009, 17:25
Цитата(ressac @  15.3.2009,  15:19 Найти цитируемый пост)
есть класс X в нём реализован clone()

Значит, криво реализован. Если требуется выполнять "глубокое" копирование, то об этом придется позаботиться самостоятельно.

Автор: 4EJIOBEK 16.3.2009, 10:35
реализуй метода сlone(), при этом определи копирование массива
Код

public class Entity implements Cloneable {
    int [][] m = null;
    int x;
    public Entity() {
          x = 0;
          m = new int[5][5];
    }
     
     @Override
    protected Entity clone() throws CloneNotSupportedException {
        Entity temp = new Entity();
        temp.x = this.x;
        if (m==null) throw new NullPointerException("Array is null");
        int count_i = m.length;
        temp.m = new int[count_i][];
        for (int i = 0;i<count_i;i++){
            int count_j = m[i].length;
            temp.m[i] = new int[count_j];
            for (int j=0;j<count_j;j++){
                temp.m[i][j]=i+j;
            }
        }
        return temp;
    }
}

Автор: Joss 17.3.2009, 10:24
Скорее уж так:
Код

public class Entity implements Cloneable {
    private int x;
    private int[][] m;
    
    public Entity(int x) {
        this.x = x;
        m = new int[2][2];
    }
    
    
    @Override
    protected Object clone() throws CloneNotSupportedException {
        Entity clonedEntity = (Entity) super.clone();
        clonedEntity.m = m.clone();
        for(int i = 0; i < m.length; ++i) {
            clonedEntity.m[i] = m[i].clone();
        }
        return clonedEntity;
    }
}

Автор: 4EJIOBEK 17.3.2009, 12:08
Цитата(Joss @ 17.3.2009,  10:24)
Скорее уж так:
Код

public class Entity implements Cloneable {
    private int x;
    private int[][] m;
    
    public Entity(int x) {
        this.x = x;
        m = new int[2][2];
    }
    
    
    @Override
    protected Object clone() throws CloneNotSupportedException {
        Entity clonedEntity = (Entity) super.clone();
        clonedEntity.m = m.clone();
        for(int i = 0; i < m.length; ++i) {
            clonedEntity.m[i] = m[i].clone();
        }
        return clonedEntity;
    }
}

подправил)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)