Можно ли сгенерировать ошибку времени компиляции в зависимости от типа аннотируемого поля? - PullRequest
7 голосов
/ 18 декабря 2008

Я написал аннотацию Java, которая выглядит следующим образом:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)  // can I further limit this to only fields of type DomainObject?
public @interface Owns {
}

После краткого осмотра я не смог понять, есть ли способ еще больше ограничить использование этой аннотации, чтобы можно было аннотировать только поля определенного типа. Эта аннотация является индивидуальной для нашего домена и может использоваться только для экземпляров нашего базового класса объектов домена.

Кто-нибудь знает, как применить это во время компиляции?

Спасибо за любую помощь!

Ответы [ 2 ]

8 голосов
/ 18 декабря 2008

Вы можете выдать ошибку в обработчике аннотаций (вам нужно будет использовать закрытый API , если вы хотите поддержку Java 5). Вы можете использовать Messager , получаемый из ProcessorEnvironment , переданного в init.

Насколько это эффективно, зависит от вашей цепочки инструментов. Все будет хорошо, если вы используете javac для компиляции из командной строки или с помощью скрипта сборки. В моей версии Eclipse мне приходилось вручную включать процессоры аннотаций для проекта (через настройки проекта), и ошибки нигде не казались очевидными. (Плагины аннотаций JDT имеют точки расширения, которые обеспечивают лучшую интеграцию с IDE, если вы хотите предоставлять настраиваемую поддержку.) Было бы полезно проверять часто используемые инструменты, особенно если вам нужна поддержка произвольных сред разработки .

0 голосов
/ 18 декабря 2008

Я считаю, что это не может быть применено во время компиляции - если вы хотите убедиться, что это не в каких-либо неподходящих полях, вам придется проверить во время выполнения / загрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...