2013-09-30 1 views
0

Почему я не могу получить метод get getArrayList и вызывать его?Java Reflection ArrayList.class.getMethod ("get") возвращает NoSuchMethodException

Я использую отражение для изменения внутри своих вложенных классов. Один из моих классов имеет список классов, поэтому я хотел иметь возможность использовать одну и ту же логику для получения и вызова метода get.

упрощена, линия, которая не является

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

и он терпит неудачу, давая мне NoSuchMethodException.

Я понимаю, что я мог бы использовать aList.get(), но это не проблема, мне нужно использовать отражение, так как это находится в глубоко вложенном классе.

TL; DR Как я могу получить метод get get списка массивов?

ответ

4

Отметьте, что Class#getMethod() имеет два параметра: a String и vararg Class объектов. Прежний

список параметров

что метод объявляет.

Вы должны использовать

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

поскольку метод ArrayList#get(int) имеет int параметр.


Первоначально я пропустил весь

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

.class уже получает экземпляр Class для ArrayList. Вызов getClass, который вернет экземпляр Class для класса Class. Вы этого не хотите.

+0

спасибо! Я бы отметил это раньше, но я бы не позволил. – Ervin

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

Вам не нужно называть GetClass() метод снова после того, как .class, потому что когда вы пишете .class после имени класса, он ссылается на объект класса, который представляет данный класс.