首页 > 解决方案 > 如何使用 ReflectionAPI 在 Map 上调用“put”方法

问题描述

Map map = new HashMap();
Method[] methods = map.getClass().getMethods();
Method method = map.getClass().getMethod("put");

我在方法数组中看到方法“put”,但我收到了 getMethod(“put”) 的 NoSuchMethodException。

为什么会这样,我怎样才能访问 put 方法?我需要调用它。

标签: javareflection

解决方案


要使用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参数调用。


推荐阅读