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.