Bonjours !
Voilà, je souhaite créer un mini-framework mvc2 pour mes besoins personnelle pour le moment, mais je bloque sur un truc bizarre.

Voire la fin si ca vous dit pas de lire la marre ci-dessous

Le mvc2 regroupe tous les contrôleurs d'une vue dans une classe.
Un contrôleur est donc une classe qui référence la vue et définit un ensemble de classes écouteur, que j'appellerai des actions.
J'ai donc une structure du genre :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
public class FormController extends AViewController{
 
    public IView view;
 
    public FormController(IView view) {
        this.view = view;
    }
 
    public class SubmitAction implements ActionListener{}
 
    public class ResetAction implements ActionListener{}
 
}
Jusque ici pas de problème !!

Maintenant je voudrais pouvoir faire dériver les contrôleurs les uns des autres tous en gardant une liaison dynamique des classes interne.
Ceux-ci étant impossible en java à cause de problême de cast entre la classes interne et englobante (merci tchize_ -> ici)
J'utilise donc la réflexion pour instancier mes actions.

Jusque là tjrs pas de problème !!

Pour optimiser le traitement d'instanciation, j'ai créer une variable static , un hashmap , dans le quel je place le nom de l'action comme clé, et le constructeur par défaut , comme valeur.
Ne connaissant pas les actions définit par le contrôleur depuis un context static, j'attends la première instanciation de mon contrôleur pour initialiser mon hashmap.

Et là ca bloque
Voici le code de ma classe contrôleur de base :
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
30
31
32
33
34
35
 
public class UID_AViewController {
 
    private static HashMap<String, Constructor> constructors;
 
    public mvc2.view.UID_IView view;
 
    public UID_AViewController(mvc2.view.UID_IView view) {
        if(constructors == null)
            constructors = initBridgelisteners();
        this.view = view;
    }
 
    public Object getAction(String string){
        try {
            return  (Object) constructors.get(string + "Action").newInstance(this);
        } catch (Exception ex) {
            Logger.getLogger(UID_AViewController.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
 
    public HashMap<String, Constructor> initBridgelisteners() {
 
        return new HashMap<String, Constructor>(){{
            Class<?>[] classes = UID_AViewController.this.getClass().getClasses();
 
            for(int i = 0; i < classes.length; i++){
                System.out.println(classes[i].getSimpleName()+"--");
                if(!classes[i].isInterface())
                    put(classes[i].getSimpleName(), classes[i].getConstructors()[0]);
            }
        }};
    }
}
Quand j'exécute la fonction initBridgelisteners sans l'assigner en retour à ma variable , ou que j'enlève le contexte static de ma variable, je retrouve toutes les classes interne définit.
Mais dès que je l'assigne à ma variable static , plouf, il trouve plus rien

Donc voilà, je sais pas d'où ca peux venir, et j'aurais bien voulue une explication sur ce bug si ca en est un ???
Si quelqu'un à une idée ...