[英]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.