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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
public List<User> rankUsers (){ ... }
Donc à la fin, j'ai casté (comme un sale ) comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
(List<User>) nomDeMaMap.values();
Eclipse m'a bien indiqué qu'il n'y avait aucune erreur.
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 :

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)
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.

L'erreur dans Forum.java se situe à la ligne du cast.
Pour l'erreur dans TestR4_Stats.java, c'est cette ligne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Collection<User> users = f.rankUsers();
Pourtant, je croyais que Collection<User> incluait le type List<User>, ainsi que Map<User>, etc...

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)