首页 > 解决方案 > 在 Java 中有 2 个参数的情况下,如何使用反射调用方法?

问题描述

我正在尝试使用反射在 Apache log4j 中调用 Level 类的方法,该方法具有 2 个参数值。我该怎么做?

标签: reflectionlog4jmethod-invocation

解决方案


使用Log4j2的Level类的示例。

下面调用该方法isInRange(Level, Level)来确定日志级别是否介于一组其他两个日志级别之间。

Level warn = Level.WARN;
boolean range = warn.isInRange(Level.ERROR, LEVEL.INFO);

可以使用反射来完成:

Level warn = Level.WARN;
Method method = warn.getClass().getMethod("isInRange", Level.class, Level.class);
boolean range = method.invoke(warn, Level.ERROR, Level.INFO);

在这种情况下,两个参数都是Level对象,因此类引用Level.class被使用了两次getMethod(作为两个参数的类型)。

然后使用 调用该方法method.invoke(warn, Level.ERROR, Level.INFO)

第一个参数是我们想要调用方法的实例(在本例中warn)。
如果我们调用的方法是静态的null,就可以使用。

后两个参数是实际函数的参数isInRange


推荐阅读