2010-10-25 16 views
1

Guys, J'ai un problème légèrement différent avec le chargement des classes dynamiques Java. Je dois passer un objet (disons l'objet A1 de la classe A) au constructeur d'un objet différent B1 de la classe B, afin que les détails de l'A1 soient stockés dans B1. B1 ne sait pas quel type d'objet il reçoit. Tout ce qu'il sait, c'est que A1 est un objet.Charger dynamiquement une classe dans JAVA- Anomaly

Maintenant j'ai des fonctions dans la classe B, qui acceptent l'objet C1 et vérifient s'il est égal à l'objet A1. Donc, fondamentalement, je dois vérifier

  1. Si l'objet C1 est de la classe de type A. (En fait, je ne suis pas passé ce point.)
  2. Si les valeurs à l'intérieur des objets sont les mêmes

J'ai essayé une solution:

Lorsque vous enregistrez l'A1 objet dans B1, je stocke aussi le nom de la classe « a » puisque l'objet B1 ne reçoit que l'objet A1, mais pas le nom de la classe A.


public static void testing(Object C1, String s) //testing is the function of B called by B1 
    { 
     try{ 
      Class c = Class.forName(s); 

      if(C1 instanceof c) // This is throwing error stating c cannot be resolved to a type 
      { 
       //further checking 
      } 


     }catch (Exception e){ System.out.println(e);} 
    } 

J'ai essayé un code différent pour obtenir le type de classe pour faire une comparaison instanceof() mais je n'ai pas réussi. Toute suggestion ?

J'ai même essayé cela, mais même erreur


ClassLoader classLoader = B.class.getClassLoader(); 

     try{ 
      Class class11 = classLoader.loadClass(s); 
      if (C1 instanceof class11) 
      { 

      } 
      }catch (Exception e){ System.out.println(e);} 

Tout pointeur sur la façon de procéder serait très utile!

solution est d'utiliser: isInstance au lieu de instanceof

Il y a aussi d'autres problèmes attachés à ce problème. Laissez-moi le mettre à jour avec mon commentaire ci-dessous. Je dois maintenant comparer une valeur, disons ÂGE, à la fois dans C1 et A1, qui à l'intérieur de B1. Maintenant Comment je fais ça? Si j'essaye les fonctions ou les valeurs, je donnerai l'erreur de compilateur parce que le compilateur est encore inconscient du type de classe de l'objet C1 et A1

En outre j'aurais pu sauver X1 au lieu de A1 en premier lieu. Maintenant, je pourrais avoir à vérifier une propriété différente comme ADDRESS. Cela change radicalement la dimension du problème. L'opérateur

+0

Pas besoin d'inclure la réponse dans votre question. Au lieu de cela, acceptez simplement la réponse qui a résolu votre problème (en cliquant sur la coche verte à gauche de la réponse). De plus, si vous avez d'autres problèmes une fois celui-ci résolu, veuillez ouvrir une nouvelle question pour chaque problème. – Grodriguez

Répondre

4

instanceof L'opérateur ne travaille qu'avec des classes chargées de manière statique. Pour les classes chargées dynamiquement, utilisez la méthode isInstance sur la classe Class.

if (class11.isInstance(C1)) { 
    // do something 
} 
+0

Merci beaucoup. Je me suis cassé la tête pendant presque une journée. – bsoundra

+0

J'ai une autre requête. Ne sait pas Si c'est OK pour le poster ici. Comme il est pertinent à ce qui précède, je l'afficherai ici. Si un problème, je vais ouvrir une nouvelle question Je dois maintenant comparer une valeur, disons AGE, à la fois dans C1 et A1, qui à l'intérieur de B1. Maintenant Comment je fais ça? Si j'essaye les fonctions ou les valeurs, je vais me donner l'erreur de compilateur parce que le compilateur est toujours inconscient du type de classe de l'objet C1 et A1. – bsoundra

+0

Ouvrez une nouvelle question. –

2

Utilisation Class.isInstance() au lieu de l'opérateur instanceof:

if (c.isInstance(C1)) { 
    [...] 
} 

Note:

  • L'opérateur instanceof ne peut être utilisé sur types (qui sont connus au moment de la compilation).
  • La méthode isInstance() est appelée sur java.lang.Class objets.
1

instanceof cunstruction exige le type, pas de référence à l'objet de classe:

if (C1 instanceof MyClass) { 
    // ... 
} 

Vous pourriez utiliser:

if (c.isnstance(C1)) { 
    // ... 
}