2017-02-18 5 views
0

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

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

@OverrideOnTouch class Foo extends Activity {

И это будет генерировать onTouch метод переопределения во время компиляции.

Возможно ли это?

ответ

2

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

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

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

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

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

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