我在通过反射调用非静态方法时遇到问题。我的代码如下。当我尝试“ClassnameRemoved.printMessageToLogger(Level.INFO,”Test“);”,我得到“无法在类Logger中找到方法'log'。这是一个普通的Java类,所以你可能正在使用修改后的/ outdata Java版。“提前谢谢!
private static void printMessageToLogger(Level lvl, String message) {
try{
Class<?> clazz = Class.forName("net.packgeName.omitted.Main");
Field logger = clazz.getDeclaredField("tcLog");
Method logMethod = logger.getDeclaringClass().getDeclaredMethod("log", Level.class, String.class);
logMethod.invoke(logger, lvl, message);
}
// catch methods omitted to save space
}
答案 0 :(得分:4)
如果方法不是静态的,则需要该类的实例。
查看this example:
Class classDefinition = Class.forName(className);
object = classDefinition.newInstance();