Я разрабатываю интерпретатор на Java, и для облегчения расширения я использую некоторую рефлексию во время запуска, чтобы функции можно было вызывать только по их имени.
Пока у меня была следующая структура классов:
A extends B
B extends C
C extends D
И для доступа ко ВСЕМ методам, определенным в любом из тех классов, которые я использовал:
Method method = A.class.getMethod("theExpectedFunctionName");
Это работает.
Однако теперь, когда проект вырос, оказалось, что было бы намного удобнее иметь такую структуру классов, как:
B extends A
C extends A
D extends A
Но теперь функция getMethod, естественно, больше так не работает. Есть ли способ получить все методы, которые находятся в дочерних классах A?
Заранее огромное спасибо!
Хм, жаль, если это единственное решение ...
Решение, отнюдь не хорошее, состоит в том, чтобы просканировать путь к классам и протестировать каждый класс по методу Class.isAssignableFrom. Затем для каждого класса, прошедшего тест, возьмите его методы и поместите их в список.
A
не имеет возможности узнать о методах классов, которые его расширяют. Если вы хотите получить метод отB
, вам нуженB.class.getMethod
, а неA.class.getMethod
.