[Java] Introspection et instances

Introspection et instances [Java] - Java - Programmation

Marsh Posté le 30-04-2003 à 15:55:04    

Bonjour a tous,
 
je souhaite créer une instance d'un objet a partir de la valeur d'une chaine de caractères.
j'ai essayé forName(String machaine); et getClass, mais je pietine...
 
par exemple :
public Classee(String str1)
{
   Toto un_essai = Class.forName(str1);
}
 
Le compilateur ne veut pas de ca,
il signale : "je peux pas convertir Class en Toto"...
comment faire???  
merci
 
Giansolo

Reply

Marsh Posté le 30-04-2003 à 15:55:04   

Reply

Marsh Posté le 30-04-2003 à 16:02:20    

un cast nan ?

Reply

Marsh Posté le 30-04-2003 à 16:05:56    

Code :
  1. public Classee(String str1)
  2. {
  3.   Toto un_essai = (Toto) Class.forName(str1).newInstance();
  4. }



Message édité par benou le 30-04-2003 à 16:11:53

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 30-04-2003 à 16:09:35    

avec un cast :
Toto un_essai = (Toto) Class.forName(str1);
il me sort pratiquement le meme refrain, a savoir :
"Cannot cast from java.lang.Class to totopakage.toto"
 
les imports sont bien faits (enfin je pense).
 
merci néanmoins.

Reply

Marsh Posté le 30-04-2003 à 16:12:08    

j'ai édité.
 
y a quoi dans ta String exactement ?


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 30-04-2003 à 16:13:16    

Dans ma String il y a le nom d'une Classe qui implemente une interface de type Toto


Message édité par Giansolo le 30-04-2003 à 16:14:18
Reply

Marsh Posté le 30-04-2003 à 16:31:19    

Giansolo a écrit :

Dans ma String il y a le nom d'une Classe qui implemente une interface de type Toto


si elle a bien un constructeur vide, tu fais le newInstance(), tu castes, et ca roule !


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 30-04-2003 à 16:32:09    

Chez moi ca marche:

Code :
  1. String s = (String)Class.forName("java.lang.String" ).newInstance();


---------------
Light is right
Reply

Marsh Posté le 30-04-2003 à 16:36:39    

Oui ca marche,
merci beaucoup a tous

Reply

Marsh Posté le 01-05-2003 à 16:03:21    

arg j'ai un probleme et j'aurais encore besoin de votre aide (et en plus pendant cette journée du NON-travail!   :sweat: )...
 
ca fait suite au probleme precedent, donc voici un bout du programme :
 

Code :
  1. public MetricDoclet(String metricstr)
  2. {
  3. try
  4. {
  5.  System.out.println("**1**" );
  6.  Metric metric=(Metric)Class.forName(metricstr).newInstance();
  7.  System.out.println("**2**" );
  8. ...


 
j'appelle cette méthode avec comme parametres :
metricstr: "Line"
et en considerant ce (petit) schema explicatif:
 
package metric---->interface Metric--implements-->Classe Line
package metric--contient-->Classe MetricDoclet
 
ca n'arrive pas au **2** ca me jete avant. Avec le StackTrace, ca donne :
--------------------------------------
java.lang.Throwable(java.lang.String)
java.lang.Exception(java.lang.String)
metric.MetricDoclet(java.lang.String)
void application.Application.main(java.lang.String [])
--------------------------------------
 
quelqu'un peut-il m'aider?
merci
 
edit:a la compil ca passe, a l'execution ca jete


Message édité par Giansolo le 01-05-2003 à 16:06:26
Reply

Marsh Posté le 01-05-2003 à 16:03:21   

Reply

Marsh Posté le 01-05-2003 à 16:14:09    

essaie déjà de ne pas faire TOUT lors de la meme instruction et ca te permettra de localiser ton problème. Par exemple
 

Code :
  1. System.out.println("**1**" );
  2. Class c = Class.forName(metricstr);
  3. Object m = c.newInstance();
  4. Metric metric = (Metric) m;
  5. System.out.println("**2**" );



---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 01-05-2003 à 16:34:42    

si Line est une interface, tu peux pas l'instancier ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 01-05-2003 à 17:19:53    

euh non, Line est une classe qui implemente l'interface Metric

Reply

Marsh Posté le 01-05-2003 à 17:20:16    

mais, ne vous fatiguer plus je crois avior trouver...
merci quand meme pour vos reponses... :)

Reply

Marsh Posté le 01-05-2003 à 17:34:14    

Giansolo a écrit :

mais, ne vous fatiguer plus je crois avior trouver...
merci quand meme pour vos reponses... :)


 :fou: ce que ca peut me gonfler .... Donne au moins la solution pour que ca soit répertorié quoi ...


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 06-05-2003 à 16:01:11    

DarkLord a écrit :


 :fou: ce que ca peut me gonfler .... Donne au moins la solution pour que ca soit répertorié quoi ...


 
gonflage bis ...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed