IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

ClassCastException !!!! + Collections.synchronizedMap(new TreeMap())??


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 113
    Par défaut ClassCastException !!!! + Collections.synchronizedMap(new TreeMap())??
    On fait, j'ai voulu crée une "TreeMap" synchronisé. J'ai par hasar voulu tester ce qui est ecrit sur la javadoc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Map m = Collections.synchronizedMap(new TreeMap(...));
    et j'ai écris (dans le constructeur) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mymap = (TreeMap<Double, MyLine>) Collections.synchronizedMap(new TreeMap<Double, MyLine>());
    avec "mymap" est un attribut privé de mon class défini comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private TreeMap<Double, MyLine> mymap;
    Quand je lance mon programe je reçoi l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java.lang.ClassCastException: java.util.Collections$SynchronizedMap
    Je ne sait pas où est le problème. sachant que si je cast sur "Map", je ne poura plus utiliser les fonctionalités d'une TreeMap, comme la methode :"headMap" etc...

  2. #2
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 113
    Par défaut
    Peut étre je vais utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static SortedMap 	synchronizedSortedMap(SortedMap m)
    Mais bon, ça ne résou toujour pas le problème.

  3. #3
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Si tu fais Collections.synchronizedXXX, ça te renvoie une vue synchronisé de l'élément que tu passes en paramètre... Il ne s'agit donc pas d'un treemap, mais d'un objet différent qui implémente l'interface Map, et qui redirige toutes les méthodes sur ta TreeMap...

    De toute façon il ne fau(drai)t manipuler que des types interface quand c'est possible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<T> list = new ArrayList<T>();
    Map<K,V> map = new TreeMap<K,V>();

    Map<K,V> map = Collections.synchronizedMap(new TreeMap<K,V>());[/CODE]

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 113
    Par défaut
    Citation Envoyé par ®om
    Si tu fais Collections.synchronizedXXX, ça te renvoie une vue synchronisé de l'élément que tu passes en paramètre... Il ne s'agit donc pas d'un treemap, mais d'un objet différent qui implémente l'interface Map, et qui redirige toutes les méthodes sur ta TreeMap...

    De toute façon il ne fau(drai)t manipuler que des types interface quand c'est possible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<T> list = new ArrayList<T>();
    Map<K,V> map = new TreeMap<K,V>();

    Map<K,V> map = Collections.synchronizedMap(new TreeMap<K,V>());[/CODE]
    Si j'utilise des interface comment je peut utiliser des method specifique à une "TreeMap"?, vous allez me dire que je peut faire le down cast . Oui c'est vrai, mais bon, dans ce cas à quoi ça sert d'utiliser les interface des collection au lieu de donnéer directement la class?? Je pense que vous allez mz dire que si au future je veut changer la structure j'auré plus de choix avec moins de changement de code possible. mais en fait, cela ne me convainque pas vraiment .

    Merci, pous vous.


    Pour adiGuba :
    Oui ça marche, mais j'ai voulue dire par il y a toujour des probléme, que les Map sychroniser n'as pas résolu mon probléme. Apres j'ai réalisé que le probleme vient d'une duplication d'un id . En fait pour avoire un nembre allétoire j'ai mis la date (ce qui est une idée débile ). J'ai fait autrement apres:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while(true){
    					 Random r = new Random();
    					 String id = Long.toString(Math.abs(r.nextLong()), 36);
    					 if(!tableId.containsKey(id)){
    					 o.setId(id);
    					 break;
    					 }
    					}

    Thanks

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par freakfm
    Si j'utilise des interface comment je peut utiliser des method specifique à une "TreeMap"?
    Dans ce cas tu dois travailler directement sur une TreeMap... mais je ne pense pas qu'il y ait beaucoup de méthode qui ne soit pas défini dans une interface de l'API de collections...

    Citation Envoyé par freakfm
    vous allez me dire que je peut faire le down cast
    Non surtout pas !!!

    Citation Envoyé par freakfm
    Oui c'est vrai, mais bon, dans ce cas à quoi ça sert d'utiliser les interface des collection au lieu de donnéer directement la class?? Je pense que vous allez mz dire que si au future je veut changer la structure j'auré plus de choix avec moins de changement de code possible. mais en fait, cela ne me convainque pas vraiment .
    Le principal but est de faire abstraction de l'implémentation, et donc du code portable et réutilisable...

    Après tout si ton code doit utiliser une association clef/valeur tu n'as pas forcément besoin de limiter cela à une structure en arbre ou via une table de hashage : le principal étant que tu obtiennes ce que tu veux...

    Pourquoi limiter volontairement son code ???

    a++

  6. #6
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par freakfm
    Si j'utilise des interface comment je peut utiliser des method specifique à une "TreeMap"?
    Quoi comme méthode par exemple...?

  7. #7
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 113
    Par défaut
    Citation Envoyé par ®om
    Quoi comme méthode par exemple...?
    SortedMap headMap(Object toKey)

  8. #8
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par freakfm
    Mais bon, ça ne résou toujour pas le problème.
    C'est pourtant bien ce qu'il faut utiliser...
    Je ne vois pas où est le problème !?

    a++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Linq, Distinct et new sur des collections
    Par tfrancais dans le forum Linq
    Réponses: 1
    Dernier message: 01/09/2009, 09h32
  2. Pourquoi utiliser une Collections.synchronizedMap
    Par DevServlet dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 26/07/2009, 21h48
  3. [New] Les collections en java
    Par tirole dans le forum Collection et Stream
    Réponses: 0
    Dernier message: 01/02/2009, 09h32
  4. [] Insérer DE et Datareport existant ds new projet
    Par khany dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 10/01/2003, 09h52
  5. [VB6] Modifier la clé d'un élément d'une collection
    Par Ricou13 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 21/11/2002, 14h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo