为什么我不能获得ArrayList的“get”方法并调用它?
我在我的嵌套类中使用反射进行修改。我的一个类有一个类列表,所以我希望能够使用相同的逻辑来获取和调用get方法。
简化,失败的行是
ArrayList.class.getClass().getMethod("get")
它失败了,给我一个NoSuchMethodException。
我明白我可以使用aList.get(),但这不是重点,我需要使用反射,因为这是一个深层嵌套的类。
TL; DR 如何获得数组列表的“get”方法?
答案 0 :(得分:4)
请注意,Class#getMethod()
有两个参数:String
和Class
个对象的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对象。