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 :

Classe A, Classe B et Tableau refuse d'être créer


Sujet :

Collection et Stream Java

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 18
    Points : 17
    Points
    17
    Par défaut Classe A, Classe B et Tableau refuse d'être créer
    Bonjour. J'ai un petit soucis dans le prog ci dessous. en effet j ai une classe interne (personne) et dans la classe maîtresse je veux créer un tableau de type personne donc j 'ai procédé comme suit:


    1: dans la fct main j ai écrit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    personne amis[] = new personne[] {.....};
    ->> mais cette dernière me donnait une erreur genre le tableau ne peut pas être crée par faute de non accessibilité à personne :s bizare j'ai pas bien compris pourquoi.

    2: j'ai crée un constructeur pour ma classe maîtresse et dont laquelle j'ai crée ce tableau de personne. Bon mnt, au niveau d'exécution, ca me donne une erreur due au faite d'après l'appel du constructeur le tableau "amis" pointe sur null. donc il n y a pas eu d'ajout d'éléments dans ce tableau.

    Est ce que qqn pourra me dire pourkoi après l'appel su constcteur le tableau reste vide (null).

    Merci


    PS: J'ajoute qu'au niveau di constructeur SavPers: il m'affiche 2 donc amis a ce niveu contient les 2 éléments, alors que dans la main il me fait sortir une exception !!!

    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
    27
    28
    29
     
    import java.io.FileWriter;
     
    @SuppressWarnings("unused")
    public class SavePers {
            //Classe interne 
     
    	private class personne{
    		...........
    	};//Personne
     
    public SavePers(personne[] amis) {
    		amis = new personne[]		
    			                     		{new personne("Crow",100),
    							 new personne("Wolf", 27)};
     
    		System.out.println(amis.length);
    	}
     
    	public static void main(String[] args) {
    		personne[] amis=null;
     
    		new SavePers(amis);
    		System.out.println(amis.length);
     
     
    	}//Main
     
    }//SavePers

  2. #2
    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,


    Citation Envoyé par BloodH Voir le message
    ->> mais cette dernière me donnait une erreur genre le tableau ne peut pas être crée par faute de non accessibilité à personne :s bizare j'ai pas bien compris pourquoi.
    Il doit y avoir un problème. Dommage que les compilateur moderne ne fournisse pas d'erreur explicite et qu'on doivent se contenter d'une vague description peu précise...

    Citation Envoyé par BloodH Voir le message
    Est ce que qqn pourra me dire pourkoi après l'appel su constcteur le tableau reste vide (null).
    Il faudrait revoir les base du langage. Les références sont passé par valeur. Donc toutes modifications de la référence dans une méthode n'est pas répercuté dans l'appelant.

    De toute manière quelque soit le langage ce type de procédé n'est pas très propre...


    a++

  3. #3
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Tu ne peux pas créer un membre d'une classe interne sans référence à un objet de la classe contenante. Or la méthode main est statique, ce qui fait que tu n'es pas dans le contexte d'avoir une référence de la classe contenante, d'où le problème.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par BloodH Voir le message
    ->> mais cette dernière me donnait une erreur genre le tableau ne peut pas être crée par faute de non accessibilité à personne :s bizare j'ai pas bien compris pourquoi.
    Marrant, chez moi le message d'erreur pour ce cas là est "non-static variable this cannot be referenced from a static context", déjà plus explicite.

    En pratique, tes instances Personne sont liées à une instance de la classe Maitresse. Le code ci-dessous reproduit ton erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class Test {
      public class Sub {}
      public static void main(String[] argv){
          Sub s = new Sub(); // échec, une instance de sub ne peut exister sans une instance de Test                     
      }
    }
    Deux solution possibles:

    1) tu déclare Personne non plsu comme une inner class mais comme une static inner class. Elle n'aura plus besoin de Maitresse pour exister, mais ne pourra plus non plus appeler les méthodes non statique de Maitresse sans d'abord recevoir une référence à Maitresse:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class Test {
      public static class Sub {}
      public static void main(String[] argv){
          Sub s = new Sub(); // ok
      }
    }
    2) autre possibilité, tu crée tes personnes en utilisant une isntance de maitresse englobante (attention ça fait mal aux yeux)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class Test {
      public class Sub {}
      public static void main(String[] argv){
          Test t = new Test();
          Sub s = t.new Sub(); // aie les yeux, c'est correct!
      }
    }
    3) tu crée un méthode dans Maitresse qui génère des Personne (principe de délagation).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Test {
      public class Sub {}
      public Sub createSub() {return new Sub();}
      public static void main(String[] argv){
          Test t = new Test();
          Sub s = t.createSub();
      }
    }

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 18
    Points : 17
    Points
    17
    Par défaut
    Merci pour vos aides:

    en effet j'ai modifié mon prog de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class Test {
      public static class Sub {}
      public static void main(String[] argv){
          Sub s = new Sub(); // ok
      }
    }
    est ça a bien marché.

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

Discussions similaires

  1. Réponses: 20
    Dernier message: 06/02/2013, 00h17
  2. Réponses: 3
    Dernier message: 19/05/2005, 10h46
  3. Visibilité de methodes dans Classe de Class
    Par Math75 dans le forum C++
    Réponses: 9
    Dernier message: 28/09/2004, 12h48
  4. Réponses: 7
    Dernier message: 10/09/2004, 14h28
  5. pb constructeurs classes dérivant classe abstraite
    Par Cornell dans le forum Langage
    Réponses: 2
    Dernier message: 10/02/2003, 19h02

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