Можно ли сгенерировать ошибку времени компиляции в зависимости от типа аннотируемого поля?

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

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

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

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

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

Ответы на вопрос(2)

Решение Вопроса

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

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

 Tony Eichelberger18 дек. 2008 г., 20:01
Это информация, которую я искал. Я покопаюсь и посмотрю, стоит ли добавлять эти проверки. Благодарю.

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

Ваш ответ на вопрос