В аннотированном типе @Lel String[]
аннотация применяется к типу элемента String
. Чтобы аннотировать тип массива, вы должны использовать String @Lel []
.
JLS содержит несколько примеров, подобных этому, в §9.7.4 :
Примечания типа могут применяться к типу массива или любому его типу компонента ( §10.1 ). Например, если предположить, что A
, B
и C
являются типами аннотаций, мета-аннотированными с помощью @Target(ElementType.TYPE_USE)
, то с учетом объявления поля:
@C int @A [] @B [] f;
@A
применяется к типу массива int[][]
, @B
применяется к типу его компонента int[]
, а @C
применяется к типу элемента int
. Дополнительные примеры см. §10.2 .
Важным свойством этого синтаксиса является то, что в двух объявлениях, которые отличаются только количеством уровней массива, аннотации слева от типа относятся к одному и тому же типу. Например, @C
применяется к типу int
во всех следующих объявлениях:
@C int f;
@C int[] f;
@C int[][] f;
Кроме того, getParameters()
будет работать для извлечения аннотации (й), если способ объявления аннотации позволяет ему ориентироваться как на само объявление параметра, так и на тип. JLS §9.7.4 более подробно объясняет условия, при которых определяется аннотация, предназначенная для типа, объявления или обоих.