Java java.lang.IllegalArgumentException:参数数量错误

问题描述 投票:0回答:2

我尝试在具有不可见的构造函数类的最终类中访问info(String var)方法(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)
java reflection illegalargumentexception
2个回答
1
投票
您只能将var0.newInstance()与它的参数一起使用。

仅将StringLoggerLoggerContext的对象传递给newInstance()方法。


0
投票
已解决!

然后,您应该从记录器管理器/工厂获取记录器的实例,例如LoggerFactory.getLogger(“ myLogger”)。info(“ message”),其中记录器的名称通常是类的名称,但不一定是。 -@GotoFinal

编辑:对不起,我不知道如何标记正确的答案,在这里还很新。
© www.soinside.com 2019 - 2024. All rights reserved.