我尝试在具有不可见的构造函数类的最终类中访问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)
var0.newInstance()
与它的参数一起使用。仅将String
,Logger
和LoggerContext
的对象传递给newInstance()
方法。
然后,您应该从记录器管理器/工厂获取记录器的实例,例如LoggerFactory.getLogger(“ myLogger”)。info(“ message”),其中记录器的名称通常是类的名称,但不一定是。 -@GotoFinal
编辑:对不起,我不知道如何标记正确的答案,在这里还很新。