1

我在通过反射调用非静态方法时遇到问题。我的代码如下。当我尝试执行“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
}
4

1 回答 1

4

如果方法不是静态的,则需要该类的实例。

这个例子

Class classDefinition = Class.forName(className);
object = classDefinition.newInstance();
于 2013-04-03T20:57:26.667 回答