Im Folgenden verwenden erstellen müssen Code sollte funktionieren--
Hier habe ichverwendetfür die äußere und innere Klasse und dann mit Hilfe von getdeclatedMethod
genannt Ihre Update-Methode.
"TestAbs" ist Ihr Glas class--
public abstract class TestAbs {
private void invokeThisMethod(AbstractClassA object) {
}
public abstract class AbstractClassA {
public void update(int remaining) {
}
}
}
Dann wird Ihr Glas Klasse von "TestAbs1" wie below--
public class TestAbs1 {
public static void main(String[] args) {
TestAbs.AbstractClassA abs = new TestAbs() {
AbstractClassA a = new AbstractClassA() {
public void update(int remaining) {
System.out.println("Inside update method : " + remaining);
}
};
}.a;
try {
int i = 1;
Class<?> class1 = Class.forName("app.test.mytest.TestAbs$AbstractClassA"); -- (*Getting instance of inner class*)
System.out.println(class1.getDeclaredMethod("update", int.class));
class1.getDeclaredMethod("update", int.class).invoke(abs, i);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Der Ausgang bekam ich ruft -
public void app.test.mytest.TestAbs$AbstractClassA.update(int)
Inside update method : 1
Antwort auf Ihren Kommentar: -
Was ich aus Ihrem Kommentar verstand, ist, dass Sie die Methode von abstractClass aufrufen wollten, die in der äußeren Klasse versteckt ist.
Gemäß meinem Verständnis gibt es eine Möglichkeit, wie below--
public abstract class TestAbs {
private void invokeThisMethod(AbstractClassA object) {
}
private abstract class AbstractClassA { --- your hidden class
public void update(int remaining) {
}
}
public class ImplementedClass extends AbstractClassA{ -- use implemented class here
....
...
}
}
Und danach, Ihre ImplementedClass die gleiche Art und Weise oben genannten verwenden. Sie können Referenzbeispiel für private innere Klasse here von Java-Dokumente finden.
Hinweis: In Ihrem Fragekontext, da Ihre innere Klasse und äußere Klasse in jar ist, denke ich, dass es schwierig ist, Implementierungsklasse in Ihr jar hinzuzufügen.
Falls Sie irgendwelche Alternativen finden, lassen Sie es bitte alle wissen;
danke.
Wenn dies die API einer Bibliothek betrifft, müssen Sie möglicherweise in der Dokumentation der Bibliothek nach vorhandenen Unterklassen der inneren 'AbstractClassA' suchen.Normalerweise finden Sie entweder (1) eine spezifische Implementierung, die Sie über ihren Konstruktor instanziieren können, oder (2) eine Factory-Klasse, die Ihnen die Generierung einer solchen Instanz anbietet. Im schlimmsten Fall (3) müssen Sie es selbst implementieren, wie in der Antwort von KDM vorgeschlagen. – Carsten