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

У меня есть метод, который получает объект 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

person Mohamed Taher Alrefaie    schedule 27.06.2015    source источник
comment
Используйте IDE. Мне нравится netbeans, но eclipse тоже хорош.   -  person twentylemon    schedule 27.06.2015
comment
IDE? Как этот ответ соотносится с моим вопросом? Мне нужно получить список методов во время выполнения...   -  person Mohamed Taher Alrefaie    schedule 27.06.2015
comment
Похоже, это связано. Короче говоря: одно лишь отражение не сможет этого сделать. Вам потребуется доступ к AST.   -  person Makoto    schedule 27.06.2015


Ответы (1)


Вы можете использовать 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) {

    }
}

}

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

person Mudassar    schedule 27.06.2015
comment
Любая конкретная причина для голосования? Если вы считаете, что предлагаемое решение противоречит цели ОП, пожалуйста, поделитесь им. - person Mudassar; 27.06.2015
comment
1. Это нехорошо, по крайней мере, когда кто-то проявляет инициативу, чтобы помочь, предпринимая усилия по созданию структурированного решения и пытаясь предоставить наилучшее возможное решение, известное публикующему человеку. 2. если это не касается решения, по крайней мере, порядочность предоставления причины, а не деморализовать усилия. 3. Тем не менее, это урок для меня не помогать людям в будущем. - person Mudassar; 27.06.2015