У меня есть класс, который реализует 2Dtable. Элементы в таблице являются общими. И таблица хранится так:
public Object[][] list;
Проблема в том, что вызов клона для этого, очевидно, не работает. Обратите внимание, что мой тестовый набор инициализирует таблицу для хранения обычных целых чисел.
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));
Здесь я делаю стол. Измени это, клонируй это. Поменяйте клона и сравните их.
Очевидно, клон изменился. Несмотря на это, это утверждение верно.
Метод затмения генерирует равный метод:
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;
}
Я предполагаю, что проблема либо в сравнении переменной list в равном, либо в методе клона.
Метод клонирования:
public Tabell2D<E> clone(){
Tabell2D<E> nyTab = new Tabell2D<E>(this.bredde,this.bredde);
nyTab.liste = liste.clone();
return nyTab;
}