Quand tu fais un appel à :
MainActivity.lstZoom.contains(tempZoom);
Ce qui se passe en interne c'est que java va regarder si l'objet tempZoom est égal à un des objets dans le vecteur. Pour se faire il existe une méthode equals(Object o) disponible sur tous les objets en java.
Donc si on voulais reproduire la fonction contains on aurait quelque chose comme ca :
1 2 3 4 5 6
| for(Object o : lstZoom) {
if(o.equals(tempZoom) {
return true;
}
}
return false; |
Sauf que , par défaut la méthode equals(Object o) retourne true seulement si les 2 références pointent vers la même case mémoire (la même instance).
C'est logique car JAVA n'est pas capable de déterminer à ta place ce qui constitue une condition d'égalité au sein de ton objet.
Pour valider que deux objets sont égaux il va donc falloir que tu surcharges la méthode equals avec ta propre implémentation.
Si je prend l'exemple de ta classe TLatitude ca donnerait :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| class TLatitude {
int Lat;
int IndCarte;
@Override
public boolean equals(Object o) {
// Si pas le bon type d'objet forcément false
if (!(o instanceof TLatitude)) {
return false;
}
// Si l'objet est lui même , forcément true
if (o == this) {
return true;
}
// On cast l'objet pour pouvoir utiliser les membre
TLatitude tLatitude = (TLatitude) o;
// Finalement la logique permettant de décider si 2 objets sont identique
return Lat == tLatitude.Lat && IndCarte == tLatitude.IndCarte;
}
} |
Note que Android Studio peux faire une bonne partie du travail pour toi , dans la classe tu fais le raccourcis alt+inser et tu choisis l'option "equals() and hashCode()" et ca va te générer les méthodes en fonctions de test choix.
Tu vas vite te rendre compte que la méthode equals() va de concert avec hashcode() , il est fortement recommandé de l'implémenter en même temps. Je te laisse te documenter sur le sujet
Partager