Salut !
J'ai encore un petit problème en Java avec les collections.
J'ai eu un petit projet à faire (gestion de forum) dans lequel j'ai dû, à un moment, classer les users par ordre décroissant de nombre de messages postés.
Plutôt que d'utiliser les Comparator (flemme), j'ai utilisé une TreeMap (en me débrouillant avec la clé histoire que ça classe bien par ordre décroissant), puis avec un .values(), j'ai récupéré un Set des users.
Seulement, l'intitulé de la fonction était du type :
Donc à la fin, j'ai casté (comme un sale
Code : Sélectionner tout - Visualiser dans une fenêtre à part public List<User> rankUsers (){ ... }) comme suit :
Eclipse m'a bien indiqué qu'il n'y avait aucune erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part (List<User>) nomDeMaMap.values();
Seulement, le professeur nous a passé des fichiers de test (JUnit, je comprends pas trop) qui me renvoient une erreur d'un type que je ne comprends pas :
Alors, déjà je ne comprends pas vraiment l'Exception, j'ai une erreur de cast, oui et ? Je me doute bien que mon cast de porc n'est pas des plus esthétiques, mais j'avais pas d'autre idée sur le moment.There were 1 errors:/ 13
1) testStatUtenti(it.polito.po.test.TestR4_Stats)java.lang.ClassCastException: java.util.TreeMap$2
at forum.Forum.rankUsers(Forum.java:90)
at it.polito.po.test.TestR4_Stats.testStatUtenti(TestR4_Stats.java:40)
at org.polito.softeng.util.SmartTestRunner$TestRunThread.run(SmartTestRunner.java:344)
L'erreur dans Forum.java se situe à la ligne du cast.
Pour l'erreur dans TestR4_Stats.java, c'est cette ligne :
Pourtant, je croyais que Collection<User> incluait le type List<User>, ainsi que Map<User>, etc...
Code : Sélectionner tout - Visualiser dans une fenêtre à part Collection<User> users = f.rankUsers();
Bref, j'ai très sûrement tort, mais en revoyant mes cours, je ne comprends pas trop. Donc, si quelqu'un pouvait m'éclairer là-dessus, ce serait super sympa.
(sinon oui, je pourrais utiliser les comparateurs, mais j'aimerais comprendre cette erreur pour éviter de la refaire la prochaine fois)
Partager