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

Langage Java Discussion :

Initialisation de liste de classes internes


Sujet :

Langage Java

  1. #1
    Membre régulier Avatar de despeludo
    Inscrit en
    Janvier 2004
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 121
    Points : 83
    Points
    83
    Par défaut Initialisation de liste de classes internes
    Bonjour à tous,

    J'essaye d'initialiser une liste d'instances de classes nested de la manière suivante :

    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
     
    public abstract class OuterClass {
      private static List<OuterClass> classes;
      static {
        classes = new ArrayList<OuterClass>();
        classes.add(new InnerClass1());
        classes.add(new InnerClass2());
      }
     
      public static List<OuterClass> getClasses() {
        return classes;
      }
     
      public abstract int getValue();
     
      public class InnerClass1 extends OuterClass{
        public int getValue() {
          return 0;
        }
      }
     
      public class InnerClass2 extends OuterClass {
        public int getValue() {
          return 1;
        }
      }
    }
    L'objectif est de pouvoir utiliser ça de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for (OuterClass oc : OuterClass.getClasses()) {
      System.out.println(oc.getValue());
    }
    Le problème est que le compilateur me retourne l'erreur suivante :
    No enclosing instance of type InnerClass is accessible. Must qualify the allocation with an enclosing instance of type InnerClass (e.g. x.new A() where x is an instance of InnerClass).

    Pourquoi pas mais comme la classe OuterClass est abstraite comment faire ?

    Merci pour vos réponses.
    Un ordinateur fait ce qu'on lui demande, et c'est bien le problème.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 553
    Points : 21 611
    Points
    21 611
    Par défaut
    Ben... Y a pas de magie. T'as trois solutions :

    - rendre tes classes imbriquées static, comme ça elles ont pas besoin d'une instance de OuterClass pour être instanciées.
    - faire que OuterClass ne soit pas abstraite
    - Faire une implémentation non-abstraite de OuterClass et utiliser une instance de cette implémentation pour instancier tes classes internes.

    En l'occurrence la première solution a l'air la bonne, puisque tes classes imbriquées ne se servent pas du tout de l'instance qui les contient.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre régulier Avatar de despeludo
    Inscrit en
    Janvier 2004
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 121
    Points : 83
    Points
    83
    Par défaut
    Merci pour cette réponse rapide.
    Le code que je présente est une simplification du code global.
    Au final j'ai adopté la troisième solution en créant une instance de classe anonyme de OuterClass dans son "constructeur" statique.

    C'est peut être pas top mais ça marche.

    Merci encore.
    Un ordinateur fait ce qu'on lui demande, et c'est bien le problème.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 553
    Points : 21 611
    Points
    21 611
    Par défaut
    L'architecture des classes n'a pas l'air terrible, quand même.

    Alors, mes objets, ils étendent tous la même classe, et ils sont contenus dans une instance de cette classe. Mais l'instance en question qui les contient, elle nous intéresse pas, les objets sont dans une liste statique.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/10/2014, 17h10
  2. Comment initialiser une liste de composants avec une boucle ?
    Par EricSid dans le forum Composants VCL
    Réponses: 5
    Dernier message: 06/04/2005, 18h46
  3. [heritage] etendre une classe interne en dehors du package
    Par ChristopheH dans le forum Langage
    Réponses: 2
    Dernier message: 11/10/2004, 14h15
  4. [Débutant][Conception] Erreur avec une classe interne
    Par Devil Redneck dans le forum Général Java
    Réponses: 5
    Dernier message: 11/06/2004, 15h45
  5. [Thread] Erreur dans une classe interne
    Par totof2308 dans le forum Général Java
    Réponses: 5
    Dernier message: 03/06/2004, 08h15

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