[英]Invoke Inner class method having parameters using reflection
我試圖測試我的代碼雖然知道使用反射不是一個好的測試方法。 我有一個外部類作為公共私有內部類具有公共方法,如下所示,
public class Outer {
private class Inner {
private int var = 1;
public Inner(int a) {
System.out.println("___");
}
public void test(int a) {
System.out.println("Hey");
}
}
}
我的主要java類如下所示
main() {
Outer b = new Outer();
System.out.println(b);
Class<?> innerClass = Class.forName("car.Outer$Inner");
Constructor<?> constructor = innerClass.getDeclaredConstructor(Outer.class, 1);
constructor.setAccessible(true);
Object c = constructor.newInstance(b,b);
Method method = c.getClass().getDeclaredMethod("test");
method.setAccessible(true);
method.invoke(c, 1);
}
這是投擲
線程“main”中的異常java.lang.NoSuchMethodException:car.Auter $ Inner.test()at java.lang.Class.getDeclaredMethod(Class.java:2130)at car.A.main(A.java:36)
如何使用反射調用內部類方法?
您需要在調用getDeclaredMethod()
提供參數類。 當您調用getDeclaredMethod()
,第一個參數是您想要查找的方法的名稱,任何剩余的參數是您想要的方法的參數的類。 這就是getDeclaredMethod()
區分重載方法名稱以獲取一個特定方法的方法。 由於您沒有提供其他參數,因此getDeclaredMethod()
正在尋找一個名為test
的方法,該方法不帶參數。 你得到一個例外,因為你在類Outer$Inner
沒有這樣的方法。 你唯一的test
方法是一個int
參數`,所以下面應該做你想要的:
Method method = c.getClass().getDeclaredMethod("test", int.class);
這里, int.class
是對應於原始參數類型int
的Class
對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.