Можно ли извлечь все члены, включая private, из класса в Java, используя отражение? - PullRequest
7 голосов
/ 01 февраля 2010

Я хотел бы иметь возможность написать, например

Method[] getMethods(Class<?> c)

, который будет делать то же самое, что и существующий

Class.getMethods()

но также включают частные и защищенные методы. Есть идеи, как мне это сделать?

Ответы [ 3 ]

11 голосов
/ 01 февраля 2010
public Method[] getMethods(Class<?> c) {
    List<Method> methods = new ArrayList<Method>();
    while (c != Object.class) {
        methods.addAll(Arrays.asList(c.getDeclaredMethods()));
        c = c.getSuperclass();
    }

    return methods.toArray(new Method[methods.size()]);
}

Объяснить:

  • getDeclaredMethods возвращает все методы, которые объявлены определенным классом, , но не его суперклассами
  • c.getSuperclass() возвращает непосредственный суперкласс данного класса
  • Таким образом, возвращаясь вверх по иерархии, пока Object, вы не получите все методы
  • если вы хотите включить методы Object, тогда пусть условие будет while (c != null)
3 голосов
/ 01 февраля 2010

Используйте взамен Class.getDeclaredMethods().Обратите внимание, что в отличие от getMethods(), этот не будет возвращать унаследованные методы - поэтому, если вы хотите все, вам нужно восстановить иерархию типов.

1 голос
/ 01 февраля 2010

Документация Javadoc описывает все детали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...