Отражение Java - вызовите защищенный класс с открытым конструктором, который принимает интерфейс в качестве аргумента - PullRequest
0 голосов
/ 28 октября 2018

Я хотел бы вызвать защищенный класс, который состоит из открытого конструктора через рефлексию. Ниже мой код

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 голосов
/ 28 октября 2018

Внутренние классы неявно принимают включающий объект в качестве первого аргумента своих конструкторов.При использовании отражения вам необходимо явно указать его, однако:

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 -----^
...