Получить только общедоступные методы класса с использованием отражения Java

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

Method[] allMethods = c.getDeclaredMethods();

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

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

Ответы

Ответ 1

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

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