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

ben*_*er3 12 java annotations

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

例如,将下面的结果x,y以及z所有具有@Nullable注解?

@Nullable public Integer x, y, z;
Run Code Online (Sandbox Code Playgroud)

我正在寻找关于此的官方规范,但是找不到它.

Rad*_*def 10

我认为我们能得到的最接近的是从§8.3开始:

FieldDeclaration:
  {FieldModifier} UnannType VariableDeclaratorList ;

VariableDeclaratorList:
  VariableDeclarator {, VariableDeclarator}

VariableDeclarator:
  VariableDeclaratorId [= VariableInitializer]
Run Code Online (Sandbox Code Playgroud)

并且FieldModifier:

FieldModifier:
  (one of)
  Annotation public protected private
  static final transient volatile 
Run Code Online (Sandbox Code Playgroud)

(因此注释是一个字段修饰符.)

回到§8.3:

通过使用多个声明,可以在单个FieldDeclaration中声明多个字段; FieldModifier S和UnannType适用于声明的所有声明符.

所以在其他方面,给出:

@Nullable public Integer x, y, z;
Run Code Online (Sandbox Code Playgroud)

我们知道,现场修饰符@Nullable public适用于所有的x,yz.

另外,阅读更多的§8.3以及§9.74将澄清即使@Nullable被声明为类型注释(即@Target(ElementType.TYPE_USE))的情况:

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

  • [...]

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

  • [...]

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

换句话说,这样一个位置的注释总是在句法上被理解为一个字段修饰符,即使它不被认为是一个声明注释(因为它没有声明@Target(ElementType.FIELD)).这也在字段声明的语法中暗示,其中类型被给出UnannType,即未注释的类型.


Dea*_* Xu 6

是的,它们都有注释.

注释是类型的修饰符Integer,而不是x.因此,所有的x,y,z有型@Nullable Integer