reflection - 在 Java 中有 2 个参数的情况下,如何使用反射调用方法?
问题描述
我正在尝试使用反射在 Apache log4j 中调用 Level 类的方法,该方法具有 2 个参数值。我该怎么做?
解决方案
使用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
。
推荐阅读
- c# - 如何在 asp.net core 中使用删除 Json 对象
- flutter - 使用 Stream 从 FireStore 获取数据并将其映射到 Flutter 类
- vue.js - 方法被多次调用,但应该被调用一次。不明白为什么?
- powershell - 在powershell中根据名称对照片进行排序
- php - 如何使用友好的 url 在 PHP MVC 上进行 Ajax POST?
- python - 如何从 Pandas Dataframe 中获取标签
- php - 限制为特定用户上传的文件数量
- laravel-5 - [Laravel][Routing] 如何通过路由参数将参数传递给控制器
- c# - 我可以在运行时更改 .NET 核心环境变量(特别是 ASPNETCORE_ENVIRONMENT)吗?
- vb.net-2010 - 如何在 datagridview 中添加 datetimepicker 控件