以下代碼應該工作 -
在這裏,我用anonymus classes
爲外部和內部類,然後在getdeclatedMethod
的幫助下調用您的更新方法。
「TestAbs」 是你的罐子分類 -
public abstract class TestAbs {
private void invokeThisMethod(AbstractClassA object) {
}
public abstract class AbstractClassA {
public void update(int remaining) {
}
}
}
然後從 「TestAbs1」 像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();
}
}
}
我得到的輸出是呼喚你的罐子類 -
public void app.test.mytest.TestAbs$AbstractClassA.update(int)
Inside update method : 1
回答您的意見: -
我從你的評論中瞭解到,你想從隱藏在外部類中的abstractClass中調用方法。
按我的理解,有一個辦法像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
....
...
}
}
而在這之後,用你的ImplementedClass上述同樣的方式。 你可以從java文檔中找到專用內部類here的參考示例。
注意:在你的問題上下文中,由於你的內部類和外部類是在jar中,所以我認爲你很難在你的jar中添加實現類。
如果您發現任何替代方法,請讓我們知道這一點;
謝謝。
如果這涉及庫的API,則可能需要查看庫的文檔,以查找內部'AbstractClassA'的現有子類。通常你會發現(1)一個特定的實現,你可以通過它的構造函數實例化,或者(2)一個工廠類,它爲你提供了這樣一個實例的生成。最壞的情況,(3)您必須按照KDM的回答中的建議自行實施。 – Carsten