Java反射-使用接受接口作为参数的公共构造函数调用受保护的类

时间:2018-10-28 08:02:59

标签: java reflection constructor inner-classes powermock

我想通过反射调用一个包含公共构造函数的受保护类。以下是我的代码

final Class clazz = Whitebox.getInnerClassType(parentClass.getClass(), 
"InnerClassName");
final Constructor constructor = Whitebox.getConstructor(clazz,AnInterface.class);
obj = constructor.newInstance(interfaceMockObject);

我收到以下异常:

org.powermock.reflect.exceptions.ConstructorNotFoundException: Failed to lookup constructor with parameter types      

我认为可能是因为构造函数参数是一个接口。

1 个答案:

答案 0 :(得分:1)

内部类隐式地将封闭对象作为其构造函数的第一个参数。但是,在使用反射时,您需要明确指定它:

final Class clazz = Whitebox.getInnerClassType(parentClass.getClass(), "InnerClassName");
final Constructor constructor = 
     Whitebox.getConstructor(clazz, paretnClass.getClass(), AnInterface.class);
     // Here -----------------------^

statusPage = constructor.newInstance(parentClass, interfaceMockObject);
// And pass the parent instance -----^