[classe]declaration de classe problematique

cs_anneli Messages postés 17 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 14 juin 2004 - 14 avril 2004 à 18:49
cs_anneli Messages postés 17 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 14 juin 2004 - 14 avril 2004 à 22:03
bonjour,
je cherche a declarer lors de mon programme une nouvelle instance de classe, si il existe une classe d'un certain nom .
voici le code:

Code:

public static void estattribut(Node atribut,Class maClasse)throws Exception{
Field[] attrib=maClasse.getFields();
for (int i=0;i<maClasse.getFields().length;i++){
if (attrib[i].getName().equals(atribut.getLocalName())){
if (maClasse.getName().equals("pack.data.RentalCompany")){
Object rentnouveau= maClasse.newInstance();
}}}}

je n'arrive a creer une instance de class que'en utilisant la methode newInstance, or avec cette methode je n'arrive pas apres a retrouver les attributs de maClasse dans rentnouveau.
J'aurais aimer pouvoir utiliser a la place
maClasse rentnouveau =new maClasse;

mais une erreur survient toujours!!!!
pour plus de precision maClasse est declaree de la maniere suivante:

Code:

try{
Class maClass=Class.forName("ca.uqam.latece.data."+noeudpar);
estattribut(noeudact,maClass);
}catch(Exception ex){
System.out.println("except pas de classe...");
}

voila pour resumé mon probleme es qu'en creeant une instance avec newInstance, je n'arrive pas a recuperer les attributs de maClasse dans rentnouveau et je n'arrive donc pas a leur attribuer des valeurs.
et je n'arrive pas a travailler avec la methode new maClasse, ou la je pourrais manipuler plus facilement les attributs!!!

voila voila
jesper avoir ete clair et pas trop embetante....
merci davance

anneli :big)

12 réponses

JBAware Messages postés 174 Date d'inscription lundi 23 septembre 2002 Statut Membre Dernière intervention 6 avril 2011 1
14 avril 2004 à 18:57
8-) JB@WAre

Je dois dire que je ne vois pas très bien ce que tu veux faire???? :blush)

peux-tu me donner d'avantages de renseignements ?
0
cs_anneli Messages postés 17 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 14 juin 2004
14 avril 2004 à 20:27
en fait je recupere des noms de balise de fichier XML et je les teste pour savoir si il existe dans mon fichier une classe du meme nom. si oui, je veux creer une instance de cette classe existante. Ensuite je regarde le noeud suivant, et vois si il correspond lui aussi a une classe, si oui je fais la meme chose et sinon je regarde si c'est un attribut de la classe precedente.Si c'est un attribut, j'affecte la valeur de la balise a l'attribut de ma nouvelle instance de classe.
Mon probleme ici se situe dans le fait que je n'arrive a creer une instance de classe que de la facon suivante:

Code:
Object rentnouveau= maClasse.newInstance();

et qu'avec cette declaration, je n'arrive pas a recuperer dans rentnouveau les attributs de maClasse, je n'arrive donc pas a leur affecter de valeur.
C'est pour cela que j'aimerai utiliser plutot le code:

Code:
maClasse rentnouveau =new maClasse();

car avec cette methode rentnouveau recupere les caracteristique de maClasse. Seulement lorsque que j'utilise cette methode, maClasse n'est pas reconnu, j'ai l'erreur suivante:

maClasse cannot be resolved or is not a type

voila j'esper avoir été plus clair!!!
0
JBAware Messages postés 174 Date d'inscription lundi 23 septembre 2002 Statut Membre Dernière intervention 6 avril 2011 1
14 avril 2004 à 20:48
8-) JB@WAre

oui en fait tu veux refaire la classe java.beans.XMLDecoder
:)
0
cs_anneli Messages postés 17 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 14 juin 2004
14 avril 2004 à 21:12
bah jvien daller jeter un coup sur cette fameuse classe et c est pas forcement tres claire!!
penses tu que je sois obliger de passer par la, ou as tu une idee de comment me debrouiller pour poursuivre mon prog??

en tout cas merci

anneli
0

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

Posez votre question
JBAware Messages postés 174 Date d'inscription lundi 23 septembre 2002 Statut Membre Dernière intervention 6 avril 2011 1
14 avril 2004 à 21:17
8-) JB@WAre

de toute façon tu essais de dire que maClasse est un type ou une classe or ce n'est pas le cas, maClasse est un objet de type Class
donc l'exception qui te dis "maClasse cannot be resolved or is not a type" est normale

autre point

regarde ce que te retourne rentNouveau.getClass();

tu peux très bien casté ton rentNouveau en objet dont le classe correspond à ma classe.
0
cs_anneli Messages postés 17 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 14 juin 2004
14 avril 2004 à 21:27
c'est vrai que l'erreur que je recois est normale... :blush)

et lorsque je declare rentnouveau de cette facon:
sachant que jai declarer ainsi maClasse:

Class maClasse=maClasse.forName("RentalCompany");

Object rentnouveau= maClasse.newInstance();

alors rentnouveau.getClass(); me retourne maClasse,

donc cela veut dire que rentnouveau est bien une instance de maClasse (n'est ce pas? jcommence a m'y perdre...)
alors pourquoi je ne recupere rien dans rentnouveau??? La classe RentalCompany et donc maClasse ont les attributs (nom, adresse et ID), pourquoi je n'arrive pas a recuperer cela dans rentnouveau??
:)
0
JBAware Messages postés 174 Date d'inscription lundi 23 septembre 2002 Statut Membre Dernière intervention 6 avril 2011 1
14 avril 2004 à 21:31
8-) JB@WAre

Si tous tes fichiers xml code le même type d'objet alors je te conseille vivement d"utiliser XMLDecoder

admettons que l'objet représenté par ton fichier text.xml soit
java.util.Vector

comme dans l'exemple de la javaDoc tu fais

XMLDecoder d = new XMLDecoder(new BufferedInputStream(new FileInputStream("C://test.xml")));

Vector v = (Vector) d.redObject();

d.close();

et voila!!!
0
JBAware Messages postés 174 Date d'inscription lundi 23 septembre 2002 Statut Membre Dernière intervention 6 avril 2011 1
14 avril 2004 à 21:37
8-) JB@WAre

Dans ton cas il faut que ta classe RentCompany est des setters et des getters pour chacun de ses attributs donc

public void setNom(String nom){ ... }
public void setAdresse(String adresse){ ... }
public void setId(int id){ ...}

et

public String getNom(){ ...}
public String getAdresse(){ ...}
public int getId(){ ...}

ce sont ces méthodes que va utiliser XMLDecoder pour reconstruire ton objet. sinon ca ne marchera pas
0
cs_anneli Messages postés 17 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 14 juin 2004
14 avril 2004 à 21:41
jsui desole de prendre de ton temps, mais jdebute et ces pas evident evident.

quand tu me parles du meme types d'objets, tu veux dire si tout au long de mon fichier XML, je fais par exemple reference au meme Vector ou a la meme Classe.

seulement dans mon cas, les balises du fichier ne correspondent pas toutes a la meme Classe, la Classe qui leur correspond depend de leur nom, j'ai une classe RentCompany qi va avec la balise du meme nom, mais jai aussi une classe client qi va avec la balise du meme nom, etc...
0
JBAware Messages postés 174 Date d'inscription lundi 23 septembre 2002 Statut Membre Dernière intervention 6 avril 2011 1
14 avril 2004 à 21:55
8-) JB@WAre

non ce que je veux dire c'est que ton fichier xml doit se présenter un peu comme ceci :

<type=RentCompany>
<name=nom><type=String><value="compA">
<name=addresse><type=String><value="qqpart je ne sais ou">
<name=id><type=int><value=1>

mais au final ton fichier xml est une représentation d'une instance de RentCompany avec
nom = compA
Addresse = qqpart je ne sais où
id=1

XMLDecoder quand tu appel sa methode readObject va fonctionner comme ceci
a la première ligne ou tag il va instancié un Objet de type RentCompany.
au deuxième tag il va voir que ce sont les donnée correspondant à l'attribut nom et donc va utiliser la méthode setNom("compA")
et ainsi de suite pour chaque attribut de l'objet RentCompany.

Or comme c'est une classe réutilisable et que toutes les classes héritent de la classe Object, il va retourner ton Objet RentCompany ainsi générer mais casté en Object

à toi par la suite de faire
RentCompany rc = (RentCompany) d.readObject();
0
JBAware Messages postés 174 Date d'inscription lundi 23 septembre 2002 Statut Membre Dernière intervention 6 avril 2011 1
14 avril 2004 à 22:02
8-) JB@WAre

si j'ai un conseil à te donner c'est d'utliser XMLEncoder pour générer un fichier XML sur un objet simple tel que RentCompany et ensuite decode le avec XMLDecoder.
regarde bien ton fichier XML et tu comprendras comment cela fonctionne.

bon courage

si tu as d'avantage de soucis envoie moi un mail et je te renverrai un exemple
0
cs_anneli Messages postés 17 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 14 juin 2004
14 avril 2004 à 22:03
ok merci beaucoup,
la jvais deja essayer de mettre tous sa sous forme
pis si je bloque, jte mailerais

merci beaucoup
0
Rejoignez-nous