Bonjour,
J'ai un petit problème de downcasting je crois,j'ai une classe mère Document et plusieurs classes fille : Livre,Revue,Dictionnaire.Livre a son tour a deux classes filles: Manuel et Roman.La classe Livre est la seule à avoir un attribut auteur et du coup la méthode getAuteur(). Dans une classe part Bibliotheque qui a un seule attribut: un vecteur de documents,on veut définir une méthode public void afficherAuteurs() de telle façon à afficher tous les auteurs des Documents qui ont possède 1. J'ai donc fait
public void afficherAuteurs() {
Iterator<Document> itr = vct.iterator();
while(itr.hasNext()){
if (itr.next() instanceof Livre) {
Livre l=(Livre)itr.next();//c'est ici que j'ai fait le downcasting
System.out.println(l.getAuteur());
}
Mais j'obtient une erreur d'exécution au niveau de la ligne Livre l=(Livre)itr.next(); ce qui veut dire que la promesse du downcasting n'a pas été tenue.
Avez-vous une idée de l'erreur que j'ai fait?
Merci
L'utilité des Iterator est quasi nulle depuis Java 5, donc à part quelques cas particuliers, si tu utilises un Iterator c'est par erreur.
Remarque : même chose pour la classe Vector qui devrait être remplacé par ArrayList dans la plupart des cas depuis Java 2 (et dans les autres cas par l'utilisation de Collections.synchronizedList).
Java 5+
public void afficherAuteurs() {
for (Document doc : vct) {
if (doc instanceof Livre) {
Livre l = (Livre) doc;
System.out.println(l.getAuteur());
}
}
}
L'utilité des Iterator est quasi nulle depuis Java 5, donc à part quelques cas particuliers, si tu utilises un Iterator c'est par erreur.
Remarque : même chose pour la classe Vector qui devrait être remplacé par ArrayList dans la plupart des cas depuis Java 2 (et dans les autres cas par l'utilisation de Collections.synchronizedList).
Java 5+
Java 8+