Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2756 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  maVar nouvelObjet = new maVar()

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

maVar nouvelObjet = new maVar()

n°1941668
M Orthogra​phe
Posté le 17-11-2009 à 17:20:45  profilanswer
 

Bonjour,
 
   J'ai le nom d'une classe dans une variable String maVar par exemple.  
Et je veux faire un nouvel objet de type maVar... quelle est la synthaxe à utiliser, si elle existe, je sais que tous les langages ne sont pas réflexifs (comme C++ si je ne m'abuse)
 
Merci

mood
Publicité
Posté le 17-11-2009 à 17:20:45  profilanswer
 

n°1941670
pataluc
Posté le 17-11-2009 à 17:27:52  profilanswer
 

je sais pas si ya mieux, mais tu dois pouvoir faire:

Code :
  1. NomDeTaClasse o = (NomDeTaClasse) Class.forName("nom de ta classe" ).newInstance();


http://java.sun.com/j2se/1.5.0/doc [...] Class.html


Message édité par pataluc le 17-11-2009 à 17:29:30
n°1941673
M Orthogra​phe
Posté le 17-11-2009 à 17:36:39  profilanswer
 

Merci mais je crois que je me suis mal exprimé ...
 
J'ai une liste de catégorie d'objet dans un String[]
 
   String[] listeCatObj={"Meubles","Fournitures","Divers"};
 
Avec un for qui va bien j'affiche  
 
  0 - Meubles
  1 - Fournitures
  2 - Divers
 
Je demande à l'utilisateur de taper un chiffre au clavier et je veux faire dans le cas où il tape 1 par exemple
Fournitures monNouvelObjet = new Fournitures();
et dans le cas où il tape 2
Divers monNouvelObjet = new Divers();
 
En gros si je recupere le choix de l'utilisateur dans la var maVar
   maVar monNouvelObjet = new maVar();
 
...


Message édité par M Orthographe le 17-11-2009 à 17:38:51
n°1941694
pataluc
Posté le 17-11-2009 à 17:56:55  profilanswer
 

ma réponse n'est pas incompatible... par contre il va bien te falloir pouvoir type cet objet de manière générique...

n°1941701
M Orthogra​phe
Posté le 17-11-2009 à 18:17:02  profilanswer
 

et bien les trois héritent de la classe ObjetMaison
 
je fais donc  

Code :
  1. try {
  2. ObjetMaison o = (ObjetMaison) Class.forName(listC.getCatObj(i)).newInstance();
  3. }
  4. catch (InstantiationException e) {
  5.      // TODO Auto-generated catch block
  6.      e.printStackTrace();
  7.     } catch (IllegalAccessException e) {
  8.      // TODO Auto-generated catch bloc
  9.      e.printStackTrace();
  10.     } catch (ClassNotFoundException e) {
  11.      // TODO Auto-generated catch block
  12.      e.printStackTrace();
  13.     }


 
??
 
où listC.getCatObj(i) renvoie bien ce que je veux


Message édité par M Orthographe le 17-11-2009 à 18:18:16
n°1941705
cbeyls
Hail to the King, Baby
Posté le 17-11-2009 à 18:30:39  profilanswer
 

Tu ferais mieux de stocker Meubles, Fournitures et le reste sous le type Class dans ta liste plutôt que sous la forme de chaînes de caractères.
 

Code :
  1. Class<?>[] listeCatObj = { Meubles.class, Fournitures.class, Divers.class };


 
Comme ça tu n'as plus qu'à faire:
 

Code :
  1. ObjetMaison o = (ObjetMaison) listeCatObj[i].newInstance();


Message édité par cbeyls le 17-11-2009 à 19:00:52
n°1941745
M Orthogra​phe
Posté le 17-11-2009 à 23:33:23  profilanswer
 

Je préfère la réponse de pataluc (qui marche à merveille) pour des raisons de maintenance. Merci à vous deux :)

n°1941763
cbeyls
Hail to the King, Baby
Posté le 18-11-2009 à 05:21:35  profilanswer
 

Ma version est plus sûre et plus facile à maintenir puisque si l'une des classes n'existe pas ou que tu fais une faute de frappe dans le nom de la classe, le code ne compilera pas. Imagine que tu fais un refactor automatique afin de renommer ta classe "Autres" en "Divers" plus tard par exemple, si tu encodes le nom de la classe en dur sous forme de chaîne de caractères le compilateur ne dira rien alors que ta chaîne sera toujours "Autres" au lieu de "Divers" et boum ça plantera plus tard à l'exécution. Tandis que si tu utilises Autres.class et que tu fais le même refactor, il sera automatiquement modifié en Divers.class donc plus facile à maintenir et pas de surprise à l'exécution.
 
De plus ma version est plus rapide puisque l'opération consistant à rechercher la classe correspondant à un nom donné ne doit plus être effectuée à l'exécution. On prend juste la classe dans le tableau et on l'instancie.


Message édité par cbeyls le 18-11-2009 à 05:23:19
n°1942426
Pourriture​ Communist
Posté le 19-11-2009 à 16:32:29  profilanswer
 

ouais battez-vous :D


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  maVar nouvelObjet = new maVar()

 

Sujets relatifs
Ça ne fonctionne pas : $type = '_GET'; $$type['mavar']; Normal ?comment faire un "read(mavar)" en python
Plus de sujets relatifs à : maVar nouvelObjet = new maVar()


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)