Réflexion Java, getMethod()
Je suis en train de travailler avec les bases de Java réflexion et de l'observation de l'information sur les méthodes des classes. J'ai besoin d'obtenir une méthode qui correspond à des spécifications telles que décrites par le getMethod() fonction. Cependant, quand je fais cela, je reçois un NoSuchMethodException, et j'espérais que vous pourriez me dire pourquoi mon application est incorrecte.
static void methodInfo2(String className) throws ClassNotFoundException,
NoSuchMethodException{
Class cls = null;
try{
cls = Class.forName(className);
} catch(ClassNotFoundException e){
e.printStackTrace();
}
System.out.println("Cls: "+cls);
Method method1 = cls.getMethod("test", null);
System.out.println("method1: "+method1);
}
EDIT1:Quand j'imprime Cls": "+cls, la sortie est "Cls: classe a8.myclass2". Pourquoi faut-il ajouter la classe? (l'a8 est correct, donc ne vous inquiétez pas à ce sujet) /EDIT1
C'est la fonction que j'utilise pour lire dans une classe de ma fonction principale, et puis je veux getMethod() avec les paramètres "test" et null, où "test" est le nom de la méthode et la valeur null signifie que la méthode n'a pas de paramètres. La classe je suis la lecture en est appelé myclass2 qui est ici:
package a8;
public class myclass2 {
void test(){
//"takes no parameters"
//"returns bool"
//"name starts with test"
//return true;
}
}
Comme vous pouvez le voir, la méthode est en effet exister dans la classe. Si vous avez pu remarquer mon erreur, je voudrais vraiment l'apprécier.
OriginalL'auteur Nibirue | 2011-12-02
Vous devez vous connecter pour publier un commentaire.
Faire de votre méthode de test public. Je crois que la Classe.getMethod() est limitée à des méthodes publiques.
getMethod()
: "Renvoie à une Méthode de l'objet qui reflète le spécifiée public membre de la méthode de la classe ou de l'interface représenté par cette Classe de l'objet."Merci 🙂 Il a travaillé
OriginalL'auteur Todd
Sans vous poster l'exception exacte et votre sortie, c'est dur à dire, mais je soupçonne que c'est parce que les classes sont dans deux packages distincts, et puisque le défaut de modificateurs d'une méthode sont juste
protected
il échoue.Utilisation
getDeclaredMethod()
pour obtenir une méthode qui n'est normalement pas visible.Pourrait par défaut privé ensuite. De toute façon, si vous utilisez
getDeclaredMethod()
vous permet d'accéder à tout.OriginalL'auteur jli