我正在尝试测试我的代码,尽管我知道使用反射不是一种好的测试方法。我有一个公共(public)的外部类,具有如下所示的公共(public)方法的私有(private)内部类,
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);
}
这是 throw
Exception in thread "main" java.lang.NoSuchMethodException: car.Outer$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
parameter`,因此以下内容应该可以满足您的要求:
Method method = c.getClass().getDeclaredMethod("test", int.class);
这里,int.class
是原始参数类型int
对应的Class
对象。
关于java - 使用反射调用具有参数的内部类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52530923/