Salut à tous,
Je viens de faire face à un résultat qui m'échappe, du coup, je viens vers vous dans l'espoir de comprendre le pourquoi du comment.
En bref, j'essaye de coder une table de stockage (StorageTable) utilisant la généricité.
Mon objet de test, et un objet Shape, comportant 3 dimensions (x,y,z), le equals est codé dessus (pour les 3dimensions) et fonctionne.
Ma table de stockage correspond (en version courte à ceci) :
Et voici mon main, (il est directement inclu dans la feuille précédente) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package model.storageTable; import java.util.ArrayList; import model.libItems.Shape; public class StorageTable<Type> { private ArrayList<Type> stored; public StorageTable() { stored= new ArrayList<Type>(); } public void add(Type value) { stored.add(value); } public boolean test(Type toCheck, Type searched) { return searched.equals(toCheck); } }
J'obtiens pour k = 2 et 4 : false que ce soit directement ou par fonction (ce qui est attendu).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 public static void main(String[] args) { // On crée la table de stockage, et on la rempli de forme (k,k,k) de 0 à 9 StorageTable<Shape> s=new StorageTable<Shape>(); for (Integer k=0;k<10;k++) { s.add(new Shape(k,k,k)); } System.out.println("\n -------------------------------- \n"); //On effectue le test de 2 à 4, la forme a trouvée étant la (3,3,3), le résultat des autres correspond Shape shape=new Shape(3,3,3); for (int k=2; k<5;k++) { System.out.print("Pour : "+k); System.out.print("\t\tPar fonction : "); System.out.println(s.test(s.stored.get(k),shape)); System.out.print("\t\tDirectement : "); System.out.println(shape.equals(s.stored.get(k))); } }
J'obtiens pour k = 3 : false par fonction, et true directement (je m'attendais à true, sachant que les 2 sont normalement bien equals).
Ce qui me perturbe, c'est que les 2 font pour moi la même chose, ou presque.
J'ai fait pas mal de tests, et c'est donc le problème que j'ai finalement isolé.
Quelqu'un aurait une idée de quel en est la raison ?
Merci d'avance !
Edit : J'ai fait quelques tests supplémentaires : - ce n'est à priori pas un problème de classe dû à la généricité, getClass() me renvoie bien le même résultat.
- j'obtiens le même phénomène, en remplaçant le ListArray<Type> directement par une instant de classe Type.
- Par contre, si j'utilise le même objet plutôt qu'un nouvel, (Clone<Shape> c=new Clone<Shape>(s); ), j'obtiens bien true aux 2.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package model.storageTable; import model.libItems.Shape; public class Clone<Type> { private Type clone; public Clone(Type toClone){ clone=toClone; } public boolean test(Type toCheck,Type searched) { return searched.equals(toCheck); } public static void main(String[] args) { Shape s=new Shape(1,1,1); Clone<Shape> c=new Clone<Shape>(new Shape(1,1,1)); System.out.println(s.equals(c.clone)); System.out.println(c.test(c.clone,s)); } }
Partager