Ich habe 2 Klassen, sagen A & amp; B:
%Vor%Ich verwende jetzt reflection, um die Methoden der Klasse A aufzurufen. Ich möchte auch die in Klasse B vorhandene printHelloWorld-Methode aufrufen.
Ich habe es mit
versucht %Vor%Auch als
versucht %Vor%Aber keiner von ihnen funktioniert; Sie werfen eine InstantiationException .
Was mache ich hier falsch?
Versuchen Sie Folgendes:
%Vor% Der Unterschied besteht in der Verwendung von getDeclaredMethod()
, das Methoden von alle Sichtbarkeiten erhält ( public
, protected
, Paket / Standard und private
) anstelle von < a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html#getMethod%28java.lang.String,%20java.lang.Class...%29" > getMethod()
, die nur Methoden mit public
Sichtbarkeit erhält.
Welche Sichtbarkeit haben die Methoden, die Sie aufrufen möchten (öffentlich, privat usw.)? Wenn Sie Methoden sehen möchten, die Sie nicht direkt aufrufen können, sollten Sie getDeclaredMethod () verwenden.
Was mögen die Konstruktoren Ihrer Klassen auch? InstantiationException gibt an, dass Sie Probleme beim Abrufen einer Instanz der Klasse A (oder B) haben.
Ich habe den folgenden Code und es funktioniert:
A.java
%Vor%B.java
%Vor%Tags und Links java