Java 注释是否应用于声明语句中的所有变量?

Java 注释是否应用于声明语句中的所有变量?,java,annotations,Java,Annotations,如果使用字段注释在单个语句中声明多个字段,那么注释是否应用于所有字段 例如,以下结果是否会导致x、y和z都具有@Nullable注释 @Nullable public Integer x, y, z; 我正在寻找这方面的官方规范,但很难找到。是的,它们都有注释 注释是类型为Integer的修饰符,而不是x的修饰符。所以所有的x,y,z都是类型@Nullable Integer,我想我们能得到的最接近的是: : (因此注释是字段修改器。) 回到§8.3: 通过使用多个声明器,可以在单个Field

如果使用字段注释在单个语句中声明多个字段,那么注释是否应用于所有字段

例如,以下结果是否会导致
x
y
z
都具有
@Nullable
注释

@Nullable public Integer x, y, z;

我正在寻找这方面的官方规范,但很难找到。

是的,它们都有注释


注释是类型为
Integer
的修饰符,而不是
x
的修饰符。所以所有的
x
y
z
都是类型
@Nullable Integer

,我想我们能得到的最接近的是:

:

(因此注释是字段修改器。)

回到§8.3:

通过使用多个声明器,可以在单个FieldDeclaration中声明多个字段字段修饰符和unantype应用于声明中的所有声明符

换句话说,假设:

@Nullable public Integer x, y, z;
我们知道字段修饰符
@Nullable public
适用于所有
x
y
z

此外,阅读§8.3的更多内容,并将阐明即使将
@Nullable
声明为类型注释(即
@Target(ElementType.type_USE)
),情况也是如此:

注释可能出现在程序中的某个语法位置,在该位置它可能合理地应用于声明、类型或两者。这可能发生在五种声明上下文中的任何一种,其中修饰符紧跟在声明实体的类型之前:

  • [……]

  • 字段声明(包括枚举常量)

  • [……]

Java编程语言的语法明确地将这些位置的注释视为声明的修饰符(§8.3),[…]

换句话说,这样一个位置的注释在语法上总是被视为字段修饰符,即使它不被视为声明注释(因为它不是用
@Target(ElementType.field)
声明的)。字段声明的语法中也暗示了这一点,其中类型为
unnantype
,即unnotated类型

FieldModifier:
  (one of)
  Annotation public protected private
  static final transient volatile 
@Nullable public Integer x, y, z;