繁体   English   中英

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

[英]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是对应于原始参数类型intClass对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM