Можете ли вы сгенерировать код, переопределяющий метод, используя аннотации Java?

Можно ли написать аннотацию Java для класса, который генерирует метод, который переопределяет родительский метод класса?

В моем случае я хочу сделать это в Android:

@OverrideOnTouch class Foo extends Activity {

И он сгенерирует метод переопределения onTouch во время компиляции.

Является ли это возможным?

1 ответ

Аннотация не может генерировать код.

Вы можете написать обработчик аннотаций, который добавляет метод во время компиляции, где бы он ни находил вашу аннотацию.

Вот учебник на эту тему:

Тем не менее, имейте в виду, что написание процессора аннотаций - это значительный объем работы по программированию на Java. Также обратите внимание, что процессор аннотаций (реализован с использованием AnnotationProcessor API и вызывается через компилятор Java) не может изменить исходный код Java. Он может генерировать только новые файлы ".java".

Итак, если вы хотите внедрить новый метод в существующий класс, вам нужно скомпилировать класс, а затем использовать процессор аннотаций после компиляции, который использовал BCEL или эквивалентный, чтобы добавить необходимые методы в файлы ".class", созданные компилятор. Реализация процессора на основе BCEL... еще сложнее. И такие процессоры имеют тенденцию ломаться при обновлении Java. (Легко сделать предположения о реализации уровня JVM / уровня байт-кода, которые не поддерживаются соответствующими спецификациями... и больше не "работают" при изменении платформы.)

Этот подход упоминается в некоторых ответах на этот вопрос:

Другие вопросы по тегам