java - 如何使用 ReflectionAPI 在 Map 上调用“put”方法
问题描述
Map map = new HashMap();
Method[] methods = map.getClass().getMethods();
Method method = map.getClass().getMethod("put");
我在方法数组中看到方法“put”,但我收到了 getMethod(“put”) 的 NoSuchMethodException。
为什么会这样,我怎样才能访问 put 方法?我需要调用它。
解决方案
要使用getMethod,您不仅必须提供要获取的方法的名称,还必须提供其作为Class<?>
对象的参数类型。由于您没有传递任何参数类型,因此它正在寻找一个名为的方法,put
它不接受任何参数,但不存在这样的方法;该HashMap.put
方法有两个参数。
这些工作:
Method m1 = String.class.getMethod("length");
Method m2 = List.class.getMethod("get", int.class);
Method m3 = HashMap.class.getMethod("put", Object.class, Object.class);
该String.length
方法不接受任何参数,Class<?>
因此getMethod
. 另一方面,该List.get
方法需要一个int
参数,所以我们需要int.class
作为参数传递给getMethod
.
请注意,尽管HashMap<K,V>
是泛型类,但参数类型既是Object
因为K
也不V
是真正的类;它们是具有上限的类型参数Object
。因此,getMethod
需要用两个Object.class
参数调用。
推荐阅读
- python - 删除从 Pandas 数据框中生成的值列表
- jmeter - 在 JMeter 中运行 jQuery.jcryption.js 来加密用户名和密码
- mathjax - 如何在 MathJax-Node 中更改 SVG 的默认颜色
- algorithm - [i, j] 范围内的 k 阶统计量
- javascript - 承诺总是未定义
- node.js - Firebase 大量查询:超出最大调用堆栈大小
- android - 奖励视频广告无法加载额外的 content_rating
- java - SQL语句语法错误时ResultSet的值?
- javascript - 基于屏幕大小的网站标题或网站徽标
- java - Jacoco report-aggregate - 包括聚合项目的报告