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

avec Java Discussion :

souci de visibilité de variable


Sujet :

avec Java

  1. #1
    Membre actif Avatar de turican2
    Profil pro
    Inscrit en
    Août 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2006
    Messages : 257
    Points : 239
    Points
    239
    Par défaut souci de visibilité de variable
    bonsoir bonsoir, peut etre m'eclairer un peu

    j'ai une class:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class superGlobale {
        public static List<String> listeFichiers = new ArrayList<String>();
        public static List<String> listeFichiersMd5 =  new ArrayList<String>();
     
    }
    dans une class Runner j'ajoute des String dans la List:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     for (int i=0; i<s.length;i++)
    {
                    Matcher m = p.matcher(s[i]);
                    if ( m.find())
                    {
                          superGlobale.listeFichiers.add(s[i]);
                    }
    }
    avec le debugger je vois bien que superGlobale.listeFichiers contient suite à ce traitement 2 valeurs.

    Maintenant quand j'ai besoin de ces valeurs dans un traitement qui est aussi dans une autre class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     int titi = superGlobale.listeFichiers.size();
    me retourne 0

    Je ne comprends pas bien, je pensais que "public static" m'aurais renvoyé ma list de 2 valeurs.

    voyez vous où je me trompe?

    merci de vos retour

  2. #2
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    En tous les cas, le Petit Programme Suivant affiche bien 2 :
    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
    24
    25
    26
    package zou;
     
    import java.util.ArrayList;
     
    /**
     *
     * @author herve
     */
    public class SuperEssai
    {
      public static class SuperGlobale
      {
        public static ArrayList<String> listeFichiers = new ArrayList<String>();
      }
     
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) 
        {
          SuperGlobale.listeFichiers.add("toto");
          SuperGlobale.listeFichiers.add("titi");
          System.out.println("size="+SuperGlobale.listeFichiers.size());
        }
     
    }
    Il doit donc y avoir un autre bémol dans ton soft.

  3. #3
    Membre actif Avatar de turican2
    Profil pro
    Inscrit en
    Août 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2006
    Messages : 257
    Points : 239
    Points
    239
    Par défaut
    Alors la curiosité du siècle,

    Netbeans 6.5.1 jdk: 1.6_10 > ok
    Netbeans 6.7 jdk: 1.6_11 > ko

    doit donc s'agir d'un bug d'IDE ou de JDK toujours est il que je ne sais pas à qui exposer mon souci ni savoir si SUN connait ce probleme?

  4. #4
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 615
    Points : 15 678
    Points
    15 678
    Par défaut
    Ton problème me parrait vraiment étrange. On dirait que ta classe est réinitialisée, ce qui il me semble ne devrait jamais arriver.
    Essaie cela pour voir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class superGlobale {
        public static List<String> listeFichiers;
        public static List<String> listeFichiersMd5;
     
        static{
          System.out.println("Initialisation de superGlobale");
          listeFichiers = new ArrayList<String>();
          listeFichiersMd5 =  new ArrayList<String>();
        }
     
    }
    Pour vérifier que superGlobale n'est initialisée qu'une fois.

  5. #5
    Membre actif Avatar de turican2
    Profil pro
    Inscrit en
    Août 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2006
    Messages : 257
    Points : 239
    Points
    239
    Par défaut
    je n'ai changé aucune ligne de code pourtant, en fonction du jdk 6_10 et 6_11, le 6_10 fait bien ce qui faut mais pas le 6_11?

  6. #6
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 615
    Points : 15 678
    Points
    15 678
    Par défaut
    Et "Initialisation de superGlobale" est affiché combien de fois si tu essaie avec le code que j'ai posté?

  7. #7
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Tu aurais un code minimum mais compilable qui reproduise le problème...

    a++

    PS : Des listes en static c'est bien crade

  8. #8
    Membre actif Avatar de turican2
    Profil pro
    Inscrit en
    Août 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2006
    Messages : 257
    Points : 239
    Points
    239
    Par défaut
    OK j'écrirai le code minimum (je ne pourrais le faire que mercredi prochain en revanche) pour reproduire le souci, a noté qu'il ne se produit pas avec un jdk 6_14.

    PS : Des listes en static c'est bien crade
    Je débute en java en réalité et j'ai pas trouvé de façon de partager des elements d'objet de maniere générale.

    Admettons que j'ai une class A,B,C

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class A{
        public static List<String> listeFichiers = new ArrayList<String>();
        public static List<String> listeFichiersMd5 =  new ArrayList<String>();
     
    }
    si dans class B
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    List<String> coucou;
    A titi = new A();
    coucou = A.listeFichiers;
    alors la class C n'a aucune visibilité de l'obtej "titi" et donc la seule façon que j'ai trouvé de voir listeFichiers c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    List<String> coucou2;
    coucou2 = A.listeFichiers;

    Donc si tu sais m'expliquer comment faire plus propre je suis très largement preneur

    moi être un jeune padawan Java



    Edit:
    Et "Initialisation de superGlobale" est affiché combien de fois si tu essaie avec le code que j'ai posté?
    et bien une seule fois d'où le fait que je ne réécrive pas mes variables.

    Si effectivement j'ai ecrit du mauvais code, pas etonnant d'obtenir une mauvaise reponse de Java

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

Discussions similaires

  1. [Système] Pb de visibilité de variable
    Par jeff&&php dans le forum Langage
    Réponses: 13
    Dernier message: 17/05/2006, 09h50
  2. problème visibilité de variable
    Par chti_juanito dans le forum Langage
    Réponses: 5
    Dernier message: 18/04/2006, 14h14
  3. Soucis pour récuperer mes variables ...
    Par R'SKaP dans le forum Langage
    Réponses: 13
    Dernier message: 23/01/2006, 20h04
  4. problème de visibilité des variables dans un include
    Par d1g-2-d1g dans le forum Langage
    Réponses: 6
    Dernier message: 28/11/2005, 09h35
  5. [EasyPHP] problème de visibilité des variable dans les includes
    Par d1g-2-d1g dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 23/10/2005, 01h55

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