如果使用字段注释在单个语句中声明多个字段,注释是否适用于所有字段?
例如,将下面的结果x,y以及z所有具有@Nullable注解?
@Nullable public Integer x, y, z;
Run Code Online (Sandbox Code Playgroud)
我正在寻找关于此的官方规范,但是找不到它.
Rad*_*def 10
我认为我们能得到的最接近的是从§8.3开始:
Run Code Online (Sandbox Code Playgroud)FieldDeclaration: {FieldModifier} UnannType VariableDeclaratorList ; VariableDeclaratorList: VariableDeclarator {, VariableDeclarator} VariableDeclarator: VariableDeclaratorId [= VariableInitializer]
Run Code Online (Sandbox Code Playgroud)FieldModifier: (one of) Annotation public protected private static final transient volatile
(因此注释是一个字段修饰符.)
回到§8.3:
通过使用多个声明符,可以在单个FieldDeclaration中声明多个字段; 在FieldModifier S和UnannType适用于声明的所有声明符.
所以在其他方面,给出:
@Nullable public Integer x, y, z;
Run Code Online (Sandbox Code Playgroud)
我们知道,现场修饰符@Nullable public适用于所有的x,y和z.
另外,阅读更多的§8.3以及§9.74将澄清即使@Nullable被声明为类型注释(即@Target(ElementType.TYPE_USE))的情况:
注释可以出现在程序中的语法位置,它可以合理地应用于声明或类型,或两者兼而有之.这可能发生在五个声明上下文中的任何一个中,其中修饰符紧接在声明的实体的类型之前:
[...]
字段声明(包括枚举常量)
[...]
Java编程语言的语法明确地将这些位置的注释视为声明的修饰符(第8.3节),[...].
换句话说,这样一个位置的注释总是在句法上被理解为一个字段修饰符,即使它不被认为是一个声明注释(因为它没有声明@Target(ElementType.FIELD)).这也在字段声明的语法中暗示,其中类型被给出UnannType,即未注释的类型.