Мне интересно, можно ли сгенерировать класс через обработчик аннотации, который будет внутренним классом компилируемого класса.Возможно ли создать внутренний класс класса для компиляции с помощью обработчика аннотаций?
Например, при компиляции класса A
сгенерировать класс A$Foo
. Интересно, есть ли трюк, который можно использовать или нет. У меня возникло ощущение, что возможно создать некоторый источник, который будет скомпилирован в том же байтовом коде, что и внутренний класс. И при компиляции/времени выполнения JVM возьмет его для внутреннего класса и разрешит доступ к закрытым полям внешнего класса.
Идея этого вопроса, который не является вопросом noobie, хотя он может выглядеть более или менее техническим, заключается в использовании частного модификатора видимости для аннотированных полей, таких как Dagger, ButterKnife и т. Д. Частный модификатор, позволяющий для более удобного обнаружения неиспользуемых полей, в то время как частная защита пакетов скрывает их.
Или есть ли какое-либо обходное решение, любой способ получить лучшее из обоих слов?
Нет. Вы не можете изменить существующие исходные файлы, просто создайте новые. Но я всегда называю сгенерированные классы в соответствии с этой схемой, например 'SomeInterface $ Impl', чтобы указать, что этот сгенерированный класс принадлежит' SomeInterface'. –
Но я точно знаю, что вы имеете в виду, я много общаюсь с обработкой аннотаций и много использую его в своих библиотеках, и я просто хочу, чтобы это было возможно .... Обычно я обычно генерирую частные конечные классы реализации, а затем генерирую public factory class, который создает экземпляры этих интерфейсов с частными классами реализации. Вы можете называть это обходным путем. –