Question

Les gars,    J'ai un problème légèrement différent avec le chargement de classes Java dynamique. Je dois passer un objet (permet de dire l'objet A1 de classe A) au constructeur d'un B1 objet différent de la classe B, afin que les détails de l'A1 sont stockés dans B1. B1 ne sait pas quel type d'objet qu'il reçoit. Donc, tout ce qu'il sait est que A1 est un objet.

Maintenant, j'ai fonctions en classe B, qui acceptent l'objet C1 et vérifier si elle est égale à l'objet A1. Donc, fondamentalement, je dois vérifier

  1. Si l'objet C1 est également 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:

Lors de la mémorisation A1 d'objets à l'intérieur 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é code différent pour obtenir le type de classe pour faire une comparaison instanceof () mais je ne réussis pas. 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!

La solution est d'utiliser: isInstance au lieu de instanceof

Il y a aussi d'autres problèmes attachés à ce problème. Permettez-moi de le mettre à jour avec mon commentaire ci-dessous. I, maintenant, il faut comparer une valeur, par exemple AGE, en tant C1 et A1, B1, qui à l'intérieur. Maintenant Comment puis-je faire cela? Si je tente les fonctions ou valeurs, je me donne erreur du compilateur car le compilateur est toujours inconscient du type de classe de la C1 objet et A1

Aussi je aurais pu sauver X1 au lieu de A1 en premier lieu. Maintenant, je pourrais avoir à vérifier un chèque de propriété différente comme ADRESSE. Cela change la dimension du problème de manière drastique.

Était-ce utile?

La solution

opérateur instanceof fonctionne uniquement avec des classes chargées statiquement. Pour les classes chargées dynamiquement, utilisez la méthode isInstance sur la classe Class.

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

Autres conseils

Utiliser 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 les objets java.lang.Class.

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

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

Vous pouvez utiliser:

if (c.isnstance(C1)) {
  // ...
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top