2013-12-04 3 views
17

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

Method[] allMethods = c.getDeclaredMethods(); 

, чтобы захватить методы только этого класса, но я хочу использовать только публичные.

На данный момент я пытаюсь захватить модификаторы и выполнять определенные действия на основе этого, но по какой-либо причине значение модификатора, показанное в отладчике, и значение значения модификатора не совпадают. Например, у меня есть частный метод getNode, который, в то время как значение «модификаторы» отображается как 2 в отладчике, оно выводит "1", когда я делаю System.out.println(c.getModifiers()). Weird. Есть ли другой способ получить только публичные методы, или я пропущу что-то очевидное? Спасибо за любую помощь!

+0

Class.getMethods() будет возвращать все публичные методы (также наследуется) –

ответ

29

Я не знаю, как вы используете Modifier, но вот как это предполагается использовать

Method[] allMethods = Test.class.getDeclaredMethods(); 
for (Method method : allMethods) { 
    if (Modifier.isPublic(method.getModifiers())) { 
     System.out.println(method); 
     // use the method 
    } 
} 
+0

Ах, это именно то, что Я искал! Огромное спасибо. Я приму ответ, как только будет установлен 10-минутный лимит. : D –

+0

@ user1447477 Добро пожаловать. Вы также можете использовать «Модификатор» для других проверок. Не забывайте, что вы также можете использовать предложение Bucco в комментариях. –

Смежные вопросы