Java java .lang.IllegalArgumentException: неверное количество аргументов - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь получить доступ к методу info (String var) в конечном классе, который имеет невидимый класс consttructor (String var0, Logger var1, LoggerContext var2)

try {
Constructor<? extends Logger> var0 = logger.getClass().getDeclaredConstructor(String.class, Logger.class, LoggerContext.class);

var0.setAccessible(true);

logger.getClass().getDeclaredMethod("info", String.class).invoke(var0.newInstance(), new String(message));

} catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | InstantiationException e) {
            e.printStackTrace();
}

, и это ошибка

java.lang.IllegalArgumentException: wrong number of arguments
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)

Ответы [ 2 ]

1 голос
/ 24 января 2020

Вы можете использовать var0.newInstance() только с его аргументами.

Просто передайте объекты String, Logger и LoggerContext методу newInstance().

0 голосов
/ 24 января 2020

Решено! Затем вы должны получить экземпляр logger из менеджера / фабрики logger, например, LoggerFactory.getLogger ("myLogger"). Info ("message"), где name of logger часто является именем класса, но это необязательно. - @ GotoFinal

РЕДАКТИРОВАТЬ: Извините, я не знаю, как пометить правильный ответ, совершенно новый здесь.

...