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

时间:2018-07-26 00:22:50

标签: java annotations

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

例如,以下结果是否会在xyz中都带有@Nullable注释?

@Nullable public Integer x, y, z;

我正在寻找关于此的正式规范,但是找不到一个规范。

2 个答案:

答案 0 :(得分:10)

我认为我们能得到的最接近的是starting from §8.3

FieldDeclaration:
  {FieldModifier} UnannType VariableDeclaratorList ;

VariableDeclaratorList:
  VariableDeclarator {, VariableDeclarator}

VariableDeclarator:
  VariableDeclaratorId [= VariableInitializer]

And FieldModifier is

FieldModifier:
  (one of)
  Annotation public protected private
  static final transient volatile 

(所以注释是字段修饰符。)

回到§8.3:

  

可以使用多个声明器在单个 FieldDeclaration 中声明多个域; FieldModifier UnannType 适用于声明中的所有声明符。

所以换句话说,给出:

@Nullable public Integer x, y, z;

我们知道字段修饰符@Nullable public适用于xyz的全部。

另外,读更多的§8.3和§9.74将会澄清,即使将@Nullable声明为类型注释(即@Target(ElementType.TYPE_USE))也是如此:

  

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

     
      
  • […]

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

  •   
  • […]

  •   
     

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

换句话说,在这样一个位置的注释总是被句法地视作字段修饰符,即使它们不被视为声明注释(因为它没有用@Target(ElementType.FIELD)进行声明)。字段声明的语法中也暗示了这一点,其中类型以UnannType的形式给出,即未注释的类型

答案 1 :(得分:6)

是的,它们都有注释。

注释是pkghtmldir类型的修饰符,而不是Integer的修饰符。因此,所有xxy的类型均为z