Отражение Java - Методы Самоанализ - PullRequest
0 голосов
/ 15 мая 2011
Method[] theMethods = myClass.getMethods();
for( Method m : theMethods ){
...

}

Будет ли массив включать все методы класса? публичный, частный, охраняемый и все наследуется? Буду ли я иметь доступ ко всем из них, в основном частным и защищенным?

Если нет, как я могу получить все методы класса, а также иметь доступ ко всем?

Ответы [ 3 ]

4 голосов
/ 15 мая 2011

Javadoc ясно показывает это:

Возвращает массив, содержащий объекты Method, отражающие все открытые методы-члены класса или интерфейса, представленные этим объектом Class, включая те, которые объявлены классом или интерфейсом, и те, которые унаследованы от суперклассов и суперинтерфейсов.

Чтобы получить доступ к закрытым методам, используйте getDeclaredMethods.

1 голос
/ 15 мая 2011

Чтобы получить все методы класса, вам нужно рекурсивно вызвать getDeclaredMethods () для класса и всех его суперклассов. В зависимости от того, чего вы хотите достичь, вам может потребоваться удалить дубликаты, которые могут возникнуть из-за перегрузки метода.

1 голос
/ 15 мая 2011

Из API doc :

Возвращает массив, содержащий объекты Method, отражающие все открытые методы-члены класса или интерфейса, представленные этим объектом Class, включая те, которые объявленыкласс или интерфейс и те, которые унаследованы от суперклассов и суперинтерфейсов.

Таким образом, он получает только открытые методы.Чтобы получить все методы, вы должны использовать getDeclaredMethods() для класса и всех его суперклассов (через getSuperclass()).

Для вызова закрытых методов вы можете использовать setAccessible(true) для Method объект (если менеджер безопасности это позволяет).

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