2016-11-03 5 views
10

Я могу сгенерировать классы с нуля с помощью обработчика аннотаций, но я не мог модифицировать класс, подобный lombok. Я искал сгенерированные классы lombok в студии Android, но ничего не нашел. затем я проверил обзор ломбок через их веб-сайт, а также исследовал его на форумах, но я ничего не понял. Мой вопрос настолько прост. Как lombok объединяет сгенерированный код с минами, когда я использую @Setter, например. Как я могу разработать процессор, такой как?Как Lombok генерирует код на существующий класс?

ответ

4

Кажется, это дубликат How does lombok work?, и я бы поставил флажок, чтобы закрыть как обман, но ваша щедрость предотвращает это.

Короче говоря, Lombok фактически не генерирует код вообще. Вместо этого он использует неопределенные и недокументированные внутренние вызовы api-реализации компилятора для прямого изменения абстрактного дерева синтаксиса программы между чтением исходного кода и выводом скомпилированного байт-кода. Он может сломаться без предупреждения или уведомления об обновлении до новой версии компилятора, но в настоящее время нет другого пути.

+2

Также re «Как я могу разработать процессор, такой как?», Самый простой способ - написать пользовательскую аннотацию Lombok. См. https://binkley.blogspot.co.uk/2014/12/writing-your-own-lombok-annotation.html – Rich

-1

Ломбок генерирует код во время фазы компиляции. Вот учебник для этого http://hannesdorfmann.com/annotation-processing/annotationprocessing101.

Если вы не знакомы с объявлением собственных аннотаций, я настоятельно рекомендую начать работу с аннотациями времени выполнения. Их легче понять и отладить, а ваш код «действует» на этапе выполнения, с которым вы уже знакомы. Короткий учебник для этого: http://docs.oracle.com/javase/1.5.0/docs/guide/language/annotations.html

Смежные вопросы