Java Reflection ArrayList.class.getMethod(“get”)返回NoSuchMethodException

时间:2013-09-30 17:34:19

标签: java reflection arraylist nosuchmethoderror

为什么我不能获得ArrayList的“get”方法并调用它?

我在我的嵌套类中使用反射进行修改。我的一个类有一个类列表,所以我希望能够使用相同的逻辑来获取和调用get方法。

简化,失败的行是

ArrayList.class.getClass().getMethod("get")

它失败了,给我一个NoSuchMethodException。

我明白我可以使用aList.get(),但这不是重点,我需要使用反射,因为这是一个深层嵌套的类。

TL; DR 如何获得数组列表的“get”方法?

2 个答案:

答案 0 :(得分:4)

请注意,Class#getMethod()有两个参数:StringClass个对象的vararg。前者是

  

参数列表

该方法声明。

您需要使用

ArrayList.class.getMethod("get", int.class);

因为ArrayList#get(int)方法有一个int参数。


我最初错过了整个

ArrayList.class.getClass().getMethod("get")
          ^     ^ 
          |     |----------------------------- gets Class<Class>
          |----------------------------------- gets Class<ArrayList>

.class已获得Class的{​​{1}}个实例。在其上调用ArrayList将返回类getClass的{​​{1}}实例。你不希望这样。

答案 1 :(得分:2)

Method methods = ArrayList.class.getMethod("get", int.class);

你不需要在.class之后再次调用getClass()方法,因为当你在类名之后编写.class时,它会引用代表给定类的Class对象。