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 :

[HashMap] Initialisation directe


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2003
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 29
    Par défaut [HashMap] Initialisation directe
    Bonjour,

    J'ai une hashmap "static" et je cherche à l'initialiser à l'instanciation de ma classe.
    En fait je cherche à savoir s'il est possible de faire la même chose qu'avec un tableau, cad :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private static final String[] monTableau = {"str1","str2","str3"};
    mais avec une HashMap en lui passant directement les couples clé/valeur.

    Est-ce possible? si oui comment svp.

    Merci d'avance

  2. #2
    Membre expérimenté
    Inscrit en
    Janvier 2006
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 257
    Par défaut
    Vu les constrcteur existant je ne pense pas que cela soit possible d'initialiser ta HashMap a la declaration.

  3. #3
    Membre émérite Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Par défaut
    Tu peux faire un bloc static

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    static
    {
        initialisation
    }
    plus concrètement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    private static HashMap<Integer,String> map = new HashMap<Integer,String>();
    static
    {
        map.put(1,"toto");
        map.put(2,"titi");
    }

  4. #4
    Membre averti
    Inscrit en
    Février 2003
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 29
    Par défaut
    je ne connais pas bien l'utilisation des blocs static. Tu peux m'en dire un peu + stp

    Edit : j'allais oublier : merci pour vos réponses rapides ^^

  5. #5
    Membre émérite Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806

  6. #6
    Membre averti
    Inscrit en
    Février 2003
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 29
    Par défaut
    Un de mes collègues a trouvé ca quelque part sur le net :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    private static final HashMap<String,Boolean> myMap = 
    new HashMap() {{ put("j1", "true");}{ put("j2", "true");}};
    Que pensez-vous de ce code?

    PS : je suis toujours intéressé par quelques explications sur les blocs static. Ils sont exécutés à l'onstanciation de la classe?

  7. #7
    Membre averti
    Inscrit en
    Février 2003
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 29
    Par défaut
    Merci pour le lien c'est + clair

  8. #8
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 60
    Par défaut
    Bonjour,

    j'avais le même soucis que bibiodp et donc cette initialisation avec un bloc static semblait résoudre mon problème sauf que ça n'est pas le cas.
    Je vous explique : j'ai une classe Constantes qui contient ma HashMap static avec le bloc static d'initialisation juste dessous. Dans le code de mon appli, j'appelle la constante LISTE_TYPE_NOEUDS_DYNAMIQUE définie encore en dessous et là ça me met une "java.lang.ExceptionInInitializerError Caused by: java.lang.ClassCastException: [Ljava.lang.Object;" ?!?

    Ci-dessous le code de ma classe Constantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
        /**
         * Ma HashMap static
         */
        private static final HashMap<String, NoeudAffiche> NOEUD_ARBO = new HashMap<String, NoeudAffiche>();
     
        static {
            NOEUD_ARBO.put("String 1", new NoeudAffiche("String 1"));
            NOEUD_ARBO.put("String 2", new NoeudAffiche("String 2"));
            NOEUD_ARBO.put("String 3", new NoeudAffiche("String 3"));
            NOEUD_ARBO.put("String 4", new NoeudAffiche("String 4"));
            NOEUD_ARBO.put("String 5", new NoeudAffiche("String 5"));
            NOEUD_ARBO.put("String 6", new NoeudAffiche("String 6"));
            NOEUD_ARBO.put("String 7", new NoeudAffiche("String 7"));
            NOEUD_ARBO.put("String 8", new NoeudAffiche("String 8"));
            NOEUD_ARBO.put("String 9", new NoeudAffiche("String 9"));
            NOEUD_ARBO.put("String 10", new NoeudAffiche("String 10"));
        }
     
        /**
         * Renvoie la liste des clés de ma HashMap sous forme de tableau de String.
         * @return la liste des clés de ma HashMap sous forme de tableau de String.
         */
        public static final String[] LISTE_TYPE_NOEUDS_DYNAMIQUE = (String[]) NOEUD_ARBO.keySet().toArray();
    et l'appel dans mon appli :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String[] listeNoms = Constantes.LISTE_TYPE_NOEUDS_DYNAMIQUE;
    Comment donc faire pour que ma HashMap soit correctement initialisée avant l'appel dans mon appli ? Sachant que je souhaite ne pas avoir à instancier ma classe Constantes ...

Discussions similaires

  1. Problème initialisation Hashmap
    Par tomy29 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 01/12/2008, 18h27
  2. [Framework] [IoC] initialisation de HashMap
    Par robert_trudel dans le forum Spring
    Réponses: 1
    Dernier message: 05/08/2008, 14h26
  3. struts.xml initialiser hashmap
    Par worldchampion57 dans le forum Struts 2
    Réponses: 2
    Dernier message: 14/01/2008, 21h25
  4. Initialisation HashMap dans interface
    Par vince_grenoblois dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 16/08/2006, 00h30
  5. La communauté Direct X est au repos?
    Par Shakram dans le forum DirectX
    Réponses: 21
    Dernier message: 18/07/2002, 23h32

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