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 :

Tableau de classe ou d'objet


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut Tableau de classe ou d'objet
    Bonjour,

    soit une classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public CMaClasse
    {
      /.../
    }
    ...puis la définition d'un tableau constitué d'éléments CMaClasse:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static CMaClasse[] listeObjets = new CMaClasse[100];
    ...puis la création des éléments:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for ( int divers = 99; divers >= 0; divers-- )
      listeObjets[divers] = new CMaClasse();
    Réponse du compilateur:
    No enclosing instance of type CMaClasse is accessible. Must qualify the allocation with an enclosing instance of type CMaClasse (e.g. x.new A() where x is an instance of CMaClasse).
    Qu'est qu'il veut ?? Je me suis pourtant basé sur un exemple que j'ai trouvé dans un cours de JAVA sur Internet. Manifestement ce truc ne marche pas !

    Pouvez-vous m'indiquer la bonne syntaxe SVP ?

    @ bientôt...

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


    Quel est ton code complet ?
    Apparemment tu joues avec des inner-classes, qui sont implicitement liées à une instance de la classe "conteneur".

    Du coup tu dois être à l'intérieur de cette dernière pour créer une instance de l'inner-classes.


    a++

  3. #3
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Bonjour, en gros voici la structure du projet:
    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
    package packCommuns;
     
    import packPlanning.C_Planning.CJourPlanning;
     
    public class C_GestionDonnees implements Serializable
    {
      /.../
      public static CJourPlanning[] listeJours; // Liste de jours constituant le planning
      /.../
     
      // Constructeur
      public C_GestionDonnees()
      {
        listeJours =  new CJourPlanning[366]; // 31 jours sur 12 mois
     
        for ( divers = 365; divers >= 0; divers-- )
          listeJours[divers] = new CJourPlanning();
          // C'est là que le compilateur n'est pas d'accord
     
      }
    }
    Dans l'autre package:
    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
    package packPlanning;
     
    import packCommuns.C_GestionDonnees;
     
    public class C_Planning extends JPanel
    {
      /.../
     
      public class CJourPlanning implements Serializable
      {
        private static final long serialVersionUID = 201010L;
     
        private byte nmr_mois;
        /.../
     
        // CONSTRUCTEUR:
        public CJourPlanning()
        {
          nmr_mois = 0;
          /.../
        }
      }
    }
    Ce que je ne comprends pas, c'est que lors de la déclaration de listeJours et lors de l'instanciation de cet objet, le compilateur trouve cet élément sans problème. Ce n'est que lorsque le constructeur CJourPlanning() est sollicité que le compilateur n'est plus d'accord, pourtant tout est public !?

    @ bientôt...

  4. #4
    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
    C'est normal puisque CJourPlanning est une inner-classe. Elle est donc très lié à une instance de sa classe englobante (C_Planning). Du coup tu ne peux l'instancier qu'à l'intérieur d'une méthode d'instance de C_Planning, ou alors en utilisant une instance de C_Planning via une syntaxe assez horrible qu'il vaut mieux éviter.

    Si tu n'as pas besoin d'une relation aussi forte entre les deux classes, il faut déclarer la classe interne en static : cela deviendra une "nested-classe" (pas de lien avec une instance de la classe englobante).

    a++

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    ou alors en utilisant une instance de C_Planning via une syntaxe assez horrible qu'il vaut mieux éviter.
    Mais non, elle est jolie, allez hop:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    C_Planning planning = new C_Planning();
     
    for ( divers = 365; divers >= 0; divers-- )
          listeJours[divers] = planning.new CJourPlanning();
          // C'est là que le compilateur n'est pas d'accord
     
      }

  6. #6
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    C'est dingue, les 2 solutions fonctionnent !

    La version proposée par Tchize me sidère. Quand je vois avec quelle facilité on peut se créer des "pointeurs" vers d'autres classes situées dans d'autres paquets !
    Je crois que le C++ m'a traumatisé et m'empêche d'oser certains "trucs" en JAVA !

    Faudra quand même que j'approfondisse mes connaissances: les inner-class et nested-class ne figurent pas dans mon bouquin de JAVA

    Remarquez que la solution était dans le message envoyé par le compilateur:
    (e.g. x.new A() where x is an instance of CMaClasse), sauf que falait le comprendre

    Allez merci à vous deux et bonne nuit

  7. #7
    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 tchize_ Voir le message
    Mais non, elle est jolie, allez hop:
    non non c'est horrible


    Sans rire franchement je déconseillerais plutôt de faire des choses comme cela...


    a++

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

Discussions similaires

  1. Comparaison tableau Excel et classe java avec Objets
    Par cisco.nat dans le forum Collection et Stream
    Réponses: 17
    Dernier message: 19/06/2013, 15h45
  2. Suppression d'un tableau de classe de la memoire
    Par jhary07 dans le forum Framework .NET
    Réponses: 2
    Dernier message: 14/11/2005, 08h23
  3. tabeau de classe = tableau de classe
    Par Bason_sensei dans le forum C++
    Réponses: 25
    Dernier message: 12/10/2005, 13h01
  4. [Strategie]Classes de mapping & Objets métier
    Par yanis97 dans le forum JDBC
    Réponses: 19
    Dernier message: 16/05/2005, 09h57
  5. [Débutant]Déterminer la classe d'un objet
    Par Wisefool dans le forum Langage
    Réponses: 4
    Dernier message: 06/05/2004, 12h55

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