Créer un objet dont on a le nom de la classe objet en String
rom650
-
rom650 -
rom650 -
Bonjour,
Pour mon école, nous avons un projet d'informatique reposant sur un jeu.
Nous avons un plateau qui génère aléatoirement des types de cases et afin de rendre cela plus facilement modifiable, nous avons créé un fichier texte qui donne le nom de l'objet dans un string (enfin le nom de la classe fille étendue de la classe mère).
Est-il possible d'appeler le constructeur de l'objet dont le nom de ce constructeur est un String. C'est un peu compliquer à vous expliquer. Voici le code pour comprendre.
Merci d'avance à tous :)
Pour mon école, nous avons un projet d'informatique reposant sur un jeu.
Nous avons un plateau qui génère aléatoirement des types de cases et afin de rendre cela plus facilement modifiable, nous avons créé un fichier texte qui donne le nom de l'objet dans un string (enfin le nom de la classe fille étendue de la classe mère).
Est-il possible d'appeler le constructeur de l'objet dont le nom de ce constructeur est un String. C'est un peu compliquer à vous expliquer. Voici le code pour comprendre.
public void setCasePlateau(casePlateau casePlateau, int type){
String fichier ="typeCase.txt";
//lecture du fichier texte contenant les noms des classes en fonction du type
try{
InputStream ips=new FileInputStream(fichier);
InputStreamReader ipsr=new InputStreamReader(ips);
BufferedReader br=new BufferedReader(ipsr);
String ligne;
String typeString = Integer.toString(type);
String nomClasse;
while ((ligne=br.readLine())!=null){
if(ligne.equals(typeString)){ // Si le type correspond, on regarde le nom de la classe sur la ligne suivante
nomClasse=br.readLine();
System.out.println(nomClasse);
casePlateau = new "nomClasse"(); // mon string est ici, et c'est ici que je voudrais trouver comment faire !!
}
else{ // Sinon, on saute une ligne
br.readLine();
}
}
br.close();
}
catch (Exception e){
System.out.println(e.toString());
}
}
Merci d'avance à tous :)
A voir également:
- Créer un objet dont on a le nom de la classe objet en String
- Créer un compte google - Guide
- Comment créer un groupe whatsapp - Guide
- Créer un lien pour partager des photos - Guide
- Vente objet occasion entre particulier - Guide
- Créer un compte gmail - Guide
1 réponse
Bonjour,
"Est-il possible d'appeler le constructeur de l'objet dont le nom de ce constructeur est un String."
Avec de l'introspection c'est possible, mais il faudrait que le constructeur n'ait pas de paramètre, ou qu'ils aient tous les même paramètres en entrée.
Remarque : formellement le constructeur n'est pas celui de la classe mère, mais celui de la classe fille qui sera récupéré. Cependant au niveau des classes de manipulation on peut y faire abstraction grâce à l'héritage.
"Est-il possible d'appeler le constructeur de l'objet dont le nom de ce constructeur est un String."
Avec de l'introspection c'est possible, mais il faudrait que le constructeur n'ait pas de paramètre, ou qu'ils aient tous les même paramètres en entrée.
String className = "ClasseFille"; Class<ClasseMere> classeMere = (Class<ClasseMere>) Class.forName(className); // Constructeur sans paramètre ClasseMere objetMere = classeMere.newInstance(); // Constructeur avec paramètre (Exemple: int=42 et String="toto") Constructor<ClasseMere> constructor = classeMere.getConstructor(int.class, String.class); ClasseMere objetMere = constructor.newInstance(42, "toto");
Remarque : formellement le constructeur n'est pas celui de la classe mère, mais celui de la classe fille qui sera récupéré. Cependant au niveau des classes de manipulation on peut y faire abstraction grâce à l'héritage.
De plus, je te déconseilles vivement de catcher une Exception par un System.err.println, car ça ne te donnera pas le détail de l'erreur (quelle ligne ça planté par exemple), il vaut donc mieux faire un printStackTrace
Il faudrait également penser à découper ton code en méthode, par exemple il n'y a pas de raison que la lecture du fichier se fasse au moment du setteur, il serait plus logique de lire une seule fois le fichier et de stocker ses différentes valeurs dans une Map.
Je teste ça !!!