réflexion java appeler les méthodes d'un objet chargé
Comment puis-je appeler la méthode d'un objet qui a déjà été chargé dans la machine à l'aide de la réflexion?
J'ai essayé
Class myClass = Class.forName("myClass");
Method m = com.test.class.getDeclaredMethod("getValue",new Class[] {});
Object result = m.invoke(myClass,null);
mais je reçois java.lang.IllegalArgumentException: l'objet est une instance de la classe de déclaration.
La méthode que je tiens à appeler est nulle c'est à dire ne pas prendre des paramètres
Mise à JOUR
J'ai une application qui a déjà été chargé d'une classe "Un". Une autre classe "B" sera instancié par un cadre. Quand la classe "B" est initialisé, de classe "a" a déjà été chargé dans la JVM. Je veux appeler une méthode de instance chargée de classe "A", MAIS sans avoir une référence à la "Une" dans la classe "B". Dans les réponses, il semble que je doit créer une nouvelle instance de "Un" dans la classe "B", mais je veux accéder à un objet chargé. Si je crée une nouvelle instance de "A" à "B" pourquoi voudrais-je utiliser la réflexion? Suis-je missunderstanding quelque chose?
Grâce
La réflexion est au sujet de trouver des informations sur un Objet, pas à trouver un Objet en mémoire. Donc, si vous voulez une instance de la Classe B pour avoir accès à une instance de la Classe A, vous auriez à donner des B une poignée en quelque sorte.
c'est juste un sauvage suppose, mais peut-être la méthode que vous souhaitez invoquer doit être statique (de classe) de la méthode, plutôt que d'une méthode d'instance? Aussi, dans votre mise à jour, vous semblez être de façon incohérente à l'aide de "classe" et "instance". Ce que vous décrivez ne fait pas beaucoup de sens pour moi.
OriginalL'auteur Cratylus | 2010-09-10
Vous devez vous connecter pour publier un commentaire.
Vous êtes en passant l'instance de la Classe comme premier paramètre de
Method.invoke(..)
, mais c'est faux; vous souhaitez passer l'instance qui vous intéresse.Vous devez avoir accès à l'instance d'invoquer quoi que ce soit sur il - vous besoin de passer dans ou à obtenir une référence à partir de quelque part.
Si j'ai la référence à l'objet, pourquoi aurais-je besoin pour utiliser la réflexion? Je veux appeler une méthode d'un objet qui est déjà chargé dans la JVM d'un autre objet sans avoir une référence
il existe de nombreuses raisons pour utiliser la réflexion (par exemple, une itération à travers toutes les méthodes, l'appel d'une méthode quand vous avez le nom d'une chaîne de caractères, etc.). Cependant, l'appel d'une méthode d'instance exige encore un exemple.
Donc, ce que je suis en train de faire n'est pas possible?
OriginalL'auteur Ladlestein
Je pense que vous avez besoin
OriginalL'auteur µBio
Au lieu de:
Vous devriez être en le passant dans un instance de myClass. L'argument illégal exception est due à invoquer l'obtention d'un argument de type de la Classe à la place du type maclasse:
OriginalL'auteur Connor M
Si j'ai de la référence à l'objet, pourquoi aurais-je besoin pour utiliser la réflexion? Je veux appeler une méthode d'un objet qui est déjà chargé dans la JVM d'un autre objet sans avoir une référence.
Bien sûr, vous avez besoin d'une référence pour invoquer une méthode, vous pouvez l'utiliser comme:
Mais la période de la vie de l'instance questions en fonction de la façon dont vous créez (normalement ou par réflexion).
OriginalL'auteur sathesh
La chose à propos de
invoke
, c'est que vous n'avez pas à avoir exactement instance de la classe en question, si l'appel d'une méthode ne nécessite pas de toutes les variables d'instance de la classe parent. En fait, vous pouvez ajouter lestatic
modificateur à laMethod
et il suffit d'appeler invoquer avecnull, null, Object[]
qui est le même que:OriginalL'auteur Shadow Six
j'ai le même problème, et pour qui le connaissent, c'est très simple, si u être sur le même endroit de la classe que tu veux appeler, faire:
avec ce u va passer le selfie de l'instance et n'avez pas perdu vos valeurs.
OriginalL'auteur AndreiDeholte