Mais, même si du point de vue de l'aspect métier pour lequel l'application est envisagée, il est possible d'envisager une équivalence (et encore : à ce moment là, le nom de la fonction n'aurait pas du être equals
) entre un chien et un caillou, c'est qu'il faut des points de comparaison!
Il est en effet impossible de déterminer si une variable est équivalente à une autre si l'on ne compare rien, tu sera d'accord, non
Or, le problème, c'est que si on fait chien.equals(cailloux) cailloux n'est pas vu, à l'intérieur de la fonction comme une instance de type Caillou, mais bel et bien comme une instance de type... Object!
On est donc, a priori, l'imité à l'interface de Object, qui a peu de chance de fournir ce qui sera nécessaire pour obtenir le point de comparaison!!!
Bien sur, il y a toujours la solution du transtypage, mais:
Soit vous transtyperez "à la rache" votre Object en cailloux, en priant que ce soit bien un cailloux et pas autre chose
Soit vous devrez commencer par vérifier le type reel de votre Object, et là...
Ben, là, il faut espérer que vous ne voudrez pas envisager l'équivalence entre un Chien et trop de types différents, parce que les possibilités qui vous sont offertes sont :
redéfinir 50 fois votre fonction equals en fournissant chaque fois un type différent en argument
utiliser un visiteur, ce qui revient au même
travailler avec un pattern "Chain Of Responsability" qui, AMA est quand meme un peu lourd quand il s'agit simplement de permettre à une fonction de comparaison de fonctionner
Qu'à la limite, on puisse considérer comme possible de trouver une équivalence entre une voiture, un camion et un vélo, soit... Il y a de fores chances pour que tous ces types héritent de vehicule
.
Partager