J'ai une classe qui implémente un 2Dtable. Les éléments de la table sont génériques. Et la table est stockée comme ceci:Clone d'implémentation Java, classe générique.
public Object[][] list;
Le problème est qu'appeler le clone sur ceci apparemment ne fonctionne pas. Notez que mon testcase initialise la table pour stocker les entiers normaux.
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));
Ici, je fais une table. Changez-le, clonez-le. Changez le clone et comparez-les. Évidemment, le clone est changé. Même ainsi, cet assertTrue est bien vrai.
Procédé égale est produite par éclipse:
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;
}
Je suppose que le problème est soit dans la comparaison de la variable de liste dans égales, ou le problème dans le procédé de clonage. méthode Clone:
public Tabell2D<E> clone(){
Tabell2D<E> nyTab = new Tabell2D<E>(this.bredde,this.bredde);
nyTab.liste = liste.clone();
return nyTab;
}
Cette question peut avoir quelques réponses utiles, ils parlent aussi, et proposent des méthodes, pour les copies de tableau en profondeur: http://stackoverflow.com/questions/419858/how-to-deep-copy-an-irregular -2d-array –