Utiliser getClass() dans une fonction - Java - Programmation
Marsh Posté le 11-10-2014 à 00:56:12
Il faut faire une methode statique pour ça et lui passer les infos utiles.
Tu peux soit le faire en appel local à la fonction, soit faire le calcul de manière unique (static final)
Exemples :
Code :
|
Marsh Posté le 14-10-2014 à 16:20:19
Merci !
Autre question qui rejoint le même sujet :
Actuellement, j'ai un tableau avec des boutons radios : JRadioButton[] boutons.
Pour leurs ajouter une action, je fais comme cela :
boutons[0].addActionListener(new OuvrirConnexion1Listener());
boutons[1].addActionListener(new FermerConnexion1Listener());
boutons[2].addActionListener(new OuvrirConnexion2Listener());
boutons[3].addActionListener(new FermerConnexion2Listener());
puis :
class OuvrirConnexion1Listener implements ActionListener{
public void actionPerformed(ActionEvent e){
[[actions a effectuer]]
}
}
class FermerConnexion1Listener implements ActionListener{
public void actionPerformed(ActionEvent e){
[[actions a effectuer]]
}
}
class OuvrirConnexion2Listener implements ActionListener{
public void actionPerformed(ActionEvent e){
[[actions a effectuer]]
}
}
class FermerConnexion2Listener implements ActionListener{
public void actionPerformed(ActionEvent e){
[[actions a effectuer]]
}
}
Le problème c'est que j'ai 28 boutons (et cela peut encore augmenter) ; donc y a-t-il un moyen de factoriser ce genre de code (via une boucle...autres...) ??!
Marsh Posté le 16-10-2014 à 15:25:37
ça dépend : que veux-tu changer en fonction du bouton
Tu peux imaginer
Code :
|
Et tu peux initialiser :
Code :
|
A adapter au cas par cas...
Marsh Posté le 17-10-2014 à 10:29:11
En fait, j'ai actuellement une methode commande(int n) qui contient un switch d'actions à effectuer en fonction de n (sur un objet GestionAccesFirewall qui contient les méthodes d'ouverture/fermeture/actualisation de différentes connexions) :
Code :
|
Peux-tu m'expliquer un peu plus ce que tu me proposes stp.
Je dois créer une classe Connection et une classe ConnectionAction ?
Que doivent-elles contenir en fait ?
Merci de ton aide en tout cas !
Marsh Posté le 18-10-2014 à 12:55:49
Bah, j'ai juste fait l'hypothèse que tu avais besoin d'une classe Connexion...
La notion de classe permet de génériciser le comportement en donnant des paramètres au constructeur.
Il n'y aucune logique à séparer la partie "commande" et la partie Listener.
Pour moi ce que tu veux faire c'est un Listener qui :
- Travaille sur une règle (ou port, peut importe) de firewall (TITI, TUTU)
- Qui exécute une des actions :
* ouvrir
* fermer
* etc...
- Après l'action, il faut actualiser
Donc pourquoi séparer le listener et la partie "commande" ? Pourquoi ta fonction commande ne fait pas partie de la classe Listener ?
De plus je n'ai pas l'utilisation des int pour les switch, je préfère les enum, plus explicites (et typé surtout).
Et plutôt que de multiplier les fonctions dans GestionAccesFirewall , j'aurais fait une fonction générique avec un enum.
J'aurais plutôt fait qq chose du style.
Code :
|
Et pour l'initialisation c'est simple (et plus générique) : il suffit de boucler sur les accès "exposés" par la classe GestionAccessFirewall et les actions du listener.
Code :
|
Et comme ça, tu construits ton interface automatiquement à chaque fois que tu créées une action ou une règle d'accès dans ton code.
Ce n'est qu'une approche, mais l'idée avec la gestion par classe est d'éviter la démultiplication du code.
J'espère que ça répond au problème ou au moins que ça t'ouvre de nouvelles pistes de structuration de ton code.
Marsh Posté le 23-10-2014 à 10:58:07
Merci beaucoup !! Yu m'as bien mis sur la voie et ça m'a permis de découvrir la puissance des enum !!
Dernière question : actuellement j'ai ça
Code :
|
Je voudrai pouvoir ajouté d'autres String à mes objets TOTO, TUTU... mais sans que le nombre de ces string soit défini, exemple :
Code :
|
J'imaginai donc un constructeur dans le genre de
Code :
|
ou
Code :
|
pour récupérer mes String et pouvoir les utiliser dans mon code, mais je bloque...
Comment puis-je faire cela ?
EDIT :
J'ai trouvé, en faisant une ellipse :
Code :
|
Marsh Posté le 10-10-2014 à 16:35:22
Bonjour,
J'ai une classe java qui comprends plusieurs classes (celles-ci implementent ActionListener et utilisent la méthode actionPerformed afin de définir des actions liées à des boutons radio).
Dans chacunes de ces classes, je dois utiliser getClass().getName() puis faire des traitements sur le String obtenu ; et puisque j'ai environ 30 classes, je pensais à créer une fonction qui comprend la recupération du nom de la classe et le traitement afin de réutiliser celle-ci dans toutes les classes en question. Mais celà ne fonctionne pas...
Exemple :
Au lieu de :
class Toto1Listener implements ActionListener{
public void actionPerformed(ActionEvent e){
String s = getClass().getName();
s = substring(10,s.length()-2);
[...etc]
}
}
class Toto2Listener implements ActionListener{
public void actionPerformed(ActionEvent e){
String s = getClass().getName();
s = substring(10,s.length()-2);
[...etc]
}
}
Faire :
pubic void maFonction(){
String s = getClass().getName();
s = substring(10,s.length()-2);
[...etc]
}
class Toto1Listener implements ActionListener{
public void actionPerformed(ActionEvent e){
maFonction();
}
}
class Toto2Listener implements ActionListener{
public void actionPerformed(ActionEvent e){
maFonction();
}
}
Merci d'avance de votre aide