我正在尝试测试我的代码,尽管知道使用反射不是一种好的测试方法。我有一个外部类作为公共的私有内部类,其公共方法如下,
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
是对应于基元参数类型int
的Class
对象。