
Envoyé par
pongping
Bonjour,
Je dois utiliser instanceof quelque part dans mes classes mais tout le monde me dit que instanceof est une mauvaise construction. Entre autres parce que dans un design qui utilise l'héritage, si on rajoute une classe, on doit changer des choses dans les autres classes qui héritent de la même classe. Mais sinon je ne comprends pas très bien pourquoi ne pas l'utiliser. De plus, connaissez-vous une alternative "propre"?
Merci d'avance
Un cas typique où il faut éviter le instanceof, c'est ceci:
1 2 3 4 5
| if(o instanceof A) {
((A)o).method();
} else if(o instanceof B) {
((B)o).method();
} //... |
Parfois instanceof se justifie.
Par exemple, en ce moment pour les cours on doit faire un compilateur Java (sans optimisations). Une approche pour différencier les variables des attributs était que Attribut extends Variable, et que Attribut ait, en plus des attributs de Variable, un attribut "visibility" (private, public...).
Lorsqu'on accède à un objet Variable (pour appeler une méthode dessus par exemple), il faut qu'on teste si "on a le droit de le faire", c'est-à-dire si la variable est accessible. Pour cela on peut faire
if(!(variable instanceof Attribut) || ((Attribut)variable).isPublic())
Ce n'est finalement pas l'approche que l'on a retenu, mais il me semble que celle-ci n'est pas mauvaise.
Si quelqu'un trouve qu'elle n'est pas bonne, merci de répondre et de dire pourquoi, ça m'intéresse 
Pour finir, il y a des endroits où il FAUT toujours utiliser instanceof:
1 2 3 4 5 6 7
| @Override
public boolean equals(Object o) {
if(!(o instance MaClass) {
return false;
}
return name.equals(o.name);
} |
Partager