我在具有不可见contstructor类(string var0、logger var1、loggercontext var2)的最后一个类中尝试access info(string var)方法
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条答案
按热度按时间cidc1ykv1#
你只能用
var0.newInstance()
用它的args。只需传递
String
,Logger
以及LoggerContext
到newInstance()
方法。js5cn81o2#
解决了的!然后您应该从logger manager/factory获取logger的示例,比如loggerfactory.getlogger(“mylogger”).info(“message”),其中logger的名称通常是类的名称,但不需要这样。-@戈托菲尔
编辑:对不起,我不知道如何标记正确的答案,这里很新。