使用反射调用具有参数的内部类方法



我正在尝试测试我的代码,尽管知道使用反射不是一种好的测试方法。我有一个外部类作为公共的私有内部类,其公共方法如下,

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.Outer$Inner.test(( at java.lang.Class.getDeclaredMethod(Class.java:2130( 在车上。A.主要(A.java:36(

如何使用反射调用内部类方法获取参数?

您需要在调用getDeclaredMethod()时提供参数类。调用getDeclaredMethod()时,第一个参数是要查找的方法的名称,任何剩余的参数都是所需方法的参数类。这就是getDeclaredMethod()区分重载方法名称以获取一个特定方法的方式。由于您没有提供其他参数,因此getDeclaredMethod()正在寻找一个名为test且不带参数的方法。您收到异常,因为您在类Outer$Inner中没有这样的方法。您拥有的唯一test方法采用int参数',因此以下内容应该可以执行您想要的操作:

Method method = c.getClass().getDeclaredMethod("test", int.class);

这里,int.class是对应于基元参数类型intClass对象。

最新更新