Как аннотации типов, так и аннотации объявлений все еще существуют в Java, и они различны и не перекрываются.
Тип аннотации может быть записан при любом использовании типа .
Концептуально он создает новый, более конкретный тип.
То есть он описывает, какие значения представляет тип.
Например, тип int
содержит значения ..., -2, -1, 0, 1, 2, ...
Тип @Positive int
содержит значения 1, 2, ...
Следовательно, @Positive int
является подтипом int
.
A аннотация объявления может быть записана в любом объявлении (классе, методе или переменной). Он описывает объявленную вещь, но не описывает значения времени выполнения. Вот примеры аннотаций объявлений:
@Deprecated
class MyClass { ... }
говорит, что программисты не должны использовать MyClass
.
@Override
void myMethod() { ... }
говорит, что myMethod
переопределяет объявление в суперклассе или интерфейсе.
@SuppressWarnings(...)
int myField = INITIALIZATION-EXPRESSION;
говорит, что компилятор не должен выдавать предупреждения о коде в выражении инициализации.
Вот примеры, которые используют как аннотацию объявления, так и аннотацию типа:
@Override
@NonNull String myMethod() { ... }
@GuardedBy("myLock")
@Regex String myField;
Обратите внимание, что аннотация типа описывает значение, а аннотация объявления что-то говорит о методе или использовании поля.
По стилю аннотации объявлений пишутся в отдельной строке, а аннотации типов пишутся непосредственно перед типом в той же строке.