Java 使用反射调用具有参数的内部类方法
我正在尝试测试我的代码,尽管知道使用反射不是一种好的测试方法。我有一个外部类作为public,有一个私有的内部类和一个公共方法,如下所示Java 使用反射调用具有参数的内部类方法,java,methods,reflection,Java,Methods,Reflection,我正在尝试测试我的代码,尽管知道使用反射不是一种好的测试方法。我有一个外部类作为public,有一个私有的内部类和一个公共方法,如下所示 public class Outer { private class Inner { private int var = 1; public Inner(int a) { System.out.println("___"); } public void tes
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(){
外部b=新的外部();
系统输出打印ln(b);
Class innerClass=Class.forName(“car.Outer$Inner”);
构造函数=innerClass.getDeclaredConstructor(Outer.class,1);
constructor.setAccessible(true);
objectc=constructor.newInstance(b,b);
方法Method=c.getClass().getDeclaredMethod(“测试”);
方法setAccessible(true);
方法调用(c,1);
}
这是投掷
线程“main”java.lang.NoSuchMethodException中的异常:car.Outer$Inner.test()
位于java.lang.Class.getDeclaredMethod(Class.java:2130)
在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
对象。您可以检查您的方法是否在类中吗?它仅在类中。这同样适用于没有参数的方法。您需要在调用getDeclaredMethod()
时提供参数类。在这种情况下,c.getClass().getDeclaredMethod(“test”,int.class)
应该会起作用。你是救生员。谢天谢地:-)看起来今天已经有人问了这样一个问题:在这种情况下,OP更进一步了。