Требовать, чтобы все поля данного типа были аннотированы определенной полевой аннотацией - PullRequest
1 голос
/ 14 мая 2019

У меня есть хорошая аннотация поля

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Foo {
    // lots of useful, mandatory values here
}

, и я хотел бы создать аннотацию типа

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.CLASS)
public @interface Bar {
    ...
}

, чтобы любые аннотированные типы @Bar выдавали предупреждения компилятора, если онисодержат поля, которые не обозначены @Foo.

Другими словами, я бы хотел, чтобы Bar обеспечил соблюдение контракта, в котором все поля @Bar -аннотированного класса * должны иметь аннотацию @Foo, в противном случае я получу хорошее предупреждение от моего компилятора.

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

Спасибо!

1 Ответ

3 голосов
/ 14 мая 2019

Нет аннотации, которая заставляет javac делать это напрямую.

Однако есть вещи, называемые «процессорами аннотаций».Они запускаются как часть компиляции и могут генерировать ошибки и предупреждения.Вы можете написать его, запустив его для любого исходного файла, содержащего типы (типы), помеченные @Bar, проверяя каждое поле внутри и выдавая ошибки, если вы обнаружите любое без @Foo аннотации.

Процессоры аннотацийможет работать с аннотациями с любым уровнем хранения.

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