OVH Cloud OVH Cloud

Spécialisation classe abstraites - Plug-in

12 réponses
Avatar
Jean-Philippe Martin
Bonjour,

j'ai créer un éditeur générique que l'on peut spécialiser en spécifiant des
classes abstraites.

Comment puis-je créer un petit menu déroulant qui me proposerait de charger
telle ou telle classes spécifiant la classe abstraite avant de lancer
l'éditeur ?

Pour être plus clair, imaginer une classe abstraite HelloWorldAbstract.class
avec un methode abstraite SaySomething() qui afficherait a l'écran une
phrase quelconque. J'aimerais pouvoir étendre HelloWorldAbstract.class en
plusieurs classes différentes et les placer dans un répertoire "plug in" par
exemple. Comment puis-je créer un petit menu déroulant me permettant de
choisir au démarrage la classe que je souhaite utiliser pour affichier une
phrase a l'écran ?

Voilà j'espere avoir été clair.

ps: L'aide à m'apporter ne consiste pas dans la création du gui.

Bien à vous, Jean-Philippe.

2 réponses

1 2
Avatar
Emmanuel Feller
"Jean-Philippe Martin" a écrit dans le
message de news:411b9b94$0$284$

J'apprécie grandement l'aide que vous tentez de m'apporter. Toutefois, je
pense que l'erreur qu'il susbsiste est dûe au fait que ma classe
"HelloWorldAbstractClass" ne possède pas de constructeur par défaut comme
expliqué dans mon dernier post.


mouais forcement si tu donnes pas tout d'un coup ;)) ...

J'ai eu ce probleme en reprenant un framework qui faisait de l'instanciation
directe pour faire ce que tu veux c'est à dire de l'instanciation dynamique.
Le package reflect ne te donne hélas pas la solution ici (ou j'attends
l'avis des experts car je ne la connais pas).

Par contre tu peux faire la chose suivante :
- sortir ton initialisation de ton constructeur dans ta classe abstraite et
revenir à un constructeur par défaut.
- mettre cette initialisation dans une méthode init protected

Créer une classe factory dans ton package plugin avec une méthode comme suit
:
public HelloWorldAbstract createHelloWorldAbstract(String className, Object
leFameuxParam) throws lesExceptionsQuiVontBien{
HelloWorldAbstractClass c
(HelloWorldAbstractClass)(cl.loadClass("HelloWorldDerivee").newInstance());
c.init(leFameuxParam);
return c;
}

Et voila le tour est joué, c'est pas beau tout ça ;))

Est-ce que ceci n'ajoute pas de piment au problème ? :o)
non ca va ...


Emmanuel

Avatar
Jean-Philippe Martin
J'ai eu ce probleme en reprenant un framework qui faisait de
l'instanciation

directe pour faire ce que tu veux c'est à dire de l'instanciation
dynamique.

Le package reflect ne te donne hélas pas la solution ici (ou j'attends
l'avis des experts car je ne la connais pas).

Par contre tu peux faire la chose suivante :
- sortir ton initialisation de ton constructeur dans ta classe abstraite
et

revenir à un constructeur par défaut.
- mettre cette initialisation dans une méthode init protected

Créer une classe factory dans ton package plugin avec une méthode comme
suit

:
public HelloWorldAbstract createHelloWorldAbstract(String className,
Object

leFameuxParam) throws lesExceptionsQuiVontBien{
HelloWorldAbstractClass c >

(HelloWorldAbstractClass)(cl.loadClass("HelloWorldDerivee").newInstance());

c.init(leFameuxParam);
return c;
}

Et voila le tour est joué, c'est pas beau tout ça ;))

Est-ce que ceci n'ajoute pas de piment au problème ? :o)
non ca va ...


Emmanuel



De fait j'ai plus d'erreurs :o) Je matterais plus tard pour rendre tout ca
propre.

Merci à tous, de votre aide.

ps: je pouvais pas tout filer d'avance, je connaissais rien à ce genre de
classes :o) pensais que c'était un détail

pps: note pour plus tard: prendre des noms de classes plus court pour
exemple parce que HelloWorldAbstractClass c'est un peu long :o)


1 2