Supression autmatique d'une methode d'un prog

Fermé
henou23 Messages postés 10 Date d'inscription mercredi 30 septembre 2009 Statut Membre Dernière intervention 6 octobre 2009 - 30 sept. 2009 à 22:39
henou23 Messages postés 10 Date d'inscription mercredi 30 septembre 2009 Statut Membre Dernière intervention 6 octobre 2009 - 2 oct. 2009 à 19:22
Bonjour,
j'ai concu un simple programme java composé des plusieurs classes comprenant des methode,je voudrai créer une fenetre qui me permettera d'intoroduire le nom de l'une de mes methode qui sera supprimer automatiquement.
ceci est dans le but de connaitre les impacts qui engendrent cette suppresion

Merci

6 réponses

kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
2 oct. 2009 à 17:15
Désolé je ne donne pas mon adresse msn pour éviter qu'on me bip pour du travail le soir chez moi ^^

Mais je peux te donner un exemple de classe permettant de te donner les détails d'une classes, au moins tu auras de quoi partir.

Code de la classe 'ClassDetailsManager' :
package org.kij.rewriter.manager;

import java.lang.reflect.Field;
import java.lang.reflect.Member;
import java.lang.reflect.Method;

import org.kij.rewriter.bean.Personne;

public class ClassDetailsManager {

	/*****************/
	/** PROPERTIES **/
	/*****************/
	
	private Class classObj	=	null;
	
	/******************/
	/** CONSTRUCTORS **/
	/******************/
	
	/**
	 * ClassDetailsManager
	 * Default class constructor
	 */
	public ClassDetailsManager (){
		super();
	}

	/*************/
	/** METHODS **/
	/*************/
	
	public static void main (String[] args){
		
		ClassDetailsManager myManager = new ClassDetailsManager();
		myManager.setClassObj(Personne.class);
		String result = myManager.getClassDetails();
		System.out.println("Details for class '"+Personne.class.getName()+"' : ");
		System.out.println(result);
	}
	
	/**
	 * getClassDetails
	 * Get following details for a given class:
	 *  - properties
	 *  - methods
	 *  @return String
	 */
	public String getClassDetails (){
		
		String myDetails = "";
		try{
			myDetails += getClassProperties();
			myDetails += getClassMethods();
		}catch(SecurityException e){
			myDetails = "Security exception for class '"+getClassObj().getName()+"' : "+e.getMessage();
		}
		
		return myDetails;
	}
	
	/**
	 * getClassProperties
	 * Get list of properties for a given class
	 * @param theClass Class
	 * @return String
	 */
	private String getClassProperties (){
		String myDetails = "\nField list :";
		
		Field[] myFields = getClassObj().getDeclaredFields();
		Field myCurrField = null;
		for (int i = 0; i < myFields.length; i++){
			myDetails += "\n\t"+myFields[i].getName()+" ["+myFields[i].getType().getName()+"]";
		}
		
		return myDetails;
	}
	
	/**
	 * getClassMethods
	 * Get method description for current class
	 * @return String
	 */
	private String getClassMethods (){

		String myDetails = "\nMethod list :";
		
		Method[] myMethods = getClassObj().getDeclaredMethods();
		Class[] myClasses = null;
		for (int i = 0; i < myMethods.length; i++){
			myDetails += "\n\t["+myMethods[i].getReturnType().getName()+"] "+myMethods[i].getName()+" (";
			myClasses = myMethods[i].getParameterTypes();
			for (int j = 0; j < myClasses.length; j++){
				if ( j > 0 )
					myDetails += ",";
				myDetails += myClasses[j].getName();
			}
			myDetails += ") ";
			myClasses = myMethods[i].getExceptionTypes();
			if ( myClasses.length > 0 )
				myDetails += "throws ";
			for (int j = 0; j < myClasses.length; j++){
				if ( j > 0)
					myDetails += ",";
				myDetails += myClasses[j].getName();
			}
		}
		
		return myDetails;
	}

	/***********************/
	/** GETTERS & SETTERS **/
	/***********************/
	
	/**
	 * setClassObj
	 * Set 'classObj' property value
	 * @param theClass Class
	 */
	public void setClassObj (Class theClass){
		this.classObj = theClass;
	}
	
	/**
	 * getClassObj
	 * Get 'classObj' property value
	 * @return Class
	 */
	public Class getClassObj (){
		return this.classObj;
	}
}



Etudie un peu le code, vois comme il fonctionne, tu verras c'est relativement simple. Le principe est d'utiliser les méthodes de la classe 'Class' pour récupérer la liste des propriétés de classe, des méthodes, etc.

C'est ce qui constitue la première partie de ton travail. Ensuite, libre à toi d'utiliser cet exemple pour avoir la liste des méthodes d'une classe au sein d'une interface graphique (voir des tuto sur le web pour les interface graphique si tu ne connais pas encore)

Il te restera donc à mettre en place un système pour lire le contenu de la classe (le fichier java) afin de le ré écrire sans la méthode à supprimer.
1
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
1 oct. 2009 à 15:47
Bonjour,

Tout à fait possible.
Je n'ai plus le nom des méthodes te permettant de le faire, mais tu peux très bien invoquer instance de classe via son nom (ou son package), puis sur cette instance, récupérer la liste de ses méthodes, propriétés publique et constructeurs.

De cette manière tu as la réponse à la première partie de ta question concernant le listing des méthodes. D'ailleurs, dans les éditeurs de code, c'est justement de cette manière qu'ils récupèrent la liste des méthodes pour les afficher dans une fenêtre afin de pouvoir y accéder directement.

Pour ce qui est de les supprimer, il te faudra une fois le nom de la méthode à supprimer sélectionner, détecter d'où commence cette méthode dans le code de ta classe (recherche du fichier java correspondant à la classe dans tes packages), et où elle fini (parcours du contenu du fichier, mise en mémoire, suppression de la partie voulue, puis écrasement dans le fichier du nouveau contenu)

Enfin, je dirai que suite à l'opération de suppression, il te faudra raffraichir le composant graphique où tu liste les méthodes de la classe en question, puis que tu force une recompilation du code afin de faire apparaitre les éventuelles erreurs dues à la suppression.
0
bonjour,merci pour ta réponse mais je suis debutante voici mon programme :je veux par exemple supprimer la methode sexe3()

package Class;
public class Homme extends Personne{
String Sexe;
public String sexe3(){
return ("Sexe= ");
}

public String nom2(){
nom="Benguerba";
return(nom);
}
public String prenom2(){
prenom ="Ali";
return(prenom);
}
public String Date2(){
DateDeNaissance ="25/02/1948";
return(DateDeNaissance);
}
public String Proffesion2(){
proffesion ="Commecrçant";
return(proffesion);
}
public int Age2(){
Age=61;
return (Age);

}

}
si tu peut m'aidez je serai reconnaissante merci d'avance
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
2 oct. 2009 à 10:58
Ok, je vois que ta classe étends la classe 'Personne', peux-tu me donner son code aussi (pour reproduire ton programme chez moi et ainsi le faire en même temps que toi)

Si je peux me permettre (ne le prends pas mal), ton code est loin d'être propre et correct.
Je vois aucun constructeur, aucun getter / setter, et j'imagine vu ce que font tes méthodes que tu ne créé jamais d'instance de tes classes, tu as fais des méthodes qui te retourne des valeurs de propriété différente.

Bref, beaucoup de chose à changer si tu souhaite faire un programme aussi complexe.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
henou23 Messages postés 10 Date d'inscription mercredi 30 septembre 2009 Statut Membre Dernière intervention 6 octobre 2009
2 oct. 2009 à 14:44
bonjour, je veux bien votre adresse mail si possible bien sur,
voici la classe personne :
package Class;

public class Personne {
String nom,DateDeNaissance,proffesion;
String prenom;
public int Age;
}
et j'ai aussi d'autres classes qui sont femme et enfant qui hérite tous de la classe personne
mais moi je veux supprimé que les methode de la classe homme cité precedemment

merci
0
henou23 Messages postés 10 Date d'inscription mercredi 30 septembre 2009 Statut Membre Dernière intervention 6 octobre 2009
2 oct. 2009 à 19:22
merci pour ta réponse ausi claire
mais je veux bien que tu m'aide aussi pour faire une suppresion automatique de la methode volus en indiquant son nom

mille merci
0