Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как получить все нереализованные методы с помощью TypeElement

Автор вопроса: Mohamed Taher AlrefaieОтветов: 1

У меня есть метод, который получает объект TypeElement. Этот объект может содержать либо интерфейс, либо абстрактный класс. Любой из них может расширить или реализовать другой интерфейс.

Как получить все нереализованные методы элемента типа, которые у меня есть, включая его суперклассы и интерфейсы? А также убедиться, что каждый метод указан только один раз?

P.S. Иногда методы объявляются в интерфейсах, а затем снова объявляются в абстрактных классах.

Сценарии

abstract class A { ...methods... }
interface B{ ...methods... }`
abstract class A implements B,C { ...methods... }
abstract class A extends B { ...methods... } // B is an abstract class
interface A extends B,C { ...methods... }// B & C are both interfaces
  • Используйте IDE. Мне нравится netbeans, но eclipse тоже хорош. twentylemon 27.06.2015
  • IDE? Как этот ответ соотносится с моим вопросом? Мне нужно получить список методов во время выполнения... Mohamed Taher Alrefaie 27.06.2015
  • Похоже, это связано. Короче говоря: одно лишь отражение не сможет этого сделать. Вам потребуется доступ к AST. Makoto 27.06.2015

java

Ответы

Ответ 1 · рейтинг -3 · Mudassar

Вы можете использовать Reflection API, например, BMW реализует Car, аналогично это может быть любая реализация Car, и приведенный ниже getDeclaredMethods() предоставит все методы, аналогично getSuperclass(), который предоставит родителю множество методов для получения необходимых деталей.

public class Reflection {
public static void main(String[] args) {

    Car car = new BMW();
    Class rental = car.getClass();
    try {
        Method[] declaredMethods = rental.getDeclaredMethods();

        System.out.println("Declared Methods are: "

        + Arrays.toString(declaredMethods));

        for (Method dmethod : declaredMethods) {

            System.out.println("method = " + dmethod.getName());

        }

    } catch (Exception e) {

    }
}

}

Пожалуйста, дайте мне знать, если это ответит на вашу проблему

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы