代码之家  ›  专栏  ›  技术社区  ›  Shree

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

  •  3
  • Shree  · 技术社区  · 7 年前

    我正在尝试测试我的代码,虽然知道使用反射不是一个好的测试方法。我有一个外部类作为public,有一个私有的内部类和一个public方法,如下所示,

    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);
    }
    

    这是投掷

    在java.lang.Class.getDeclaredMethod(Class。java:2130) 在A.main(A。java:36)

    1 回复  |  直到 7 年前
        1
  •  1
  •   Ted Hopp    7 年前

    您需要在对的调用中提供参数类 getDeclaredMethod() . 当你打电话的时候 getDeclaredMethod() getDeclaredMethod() getDeclaredMethod() 正在查找名为 test Outer$Inner . 唯一的 测试 int 参数`,因此应执行以下操作:

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

    在这里, int.class Class 与基元参数类型对应的对象 内景