如果使用字段注释在单个语句中声明了多个字段,那么注释是否适用于所有字段?
例如,以下结果是否会在x
,y
和z
中都带有@Nullable
注释?
@Nullable public Integer x, y, z;
我正在寻找关于此的正式规范,但是找不到一个规范。
答案 0 :(得分:10)
我认为我们能得到的最接近的是starting from §8.3:
FieldDeclaration: {FieldModifier} UnannType VariableDeclaratorList ; VariableDeclaratorList: VariableDeclarator {, VariableDeclarator} VariableDeclarator: VariableDeclaratorId [= VariableInitializer]
FieldModifier: (one of) Annotation public protected private static final transient volatile
(所以注释是字段修饰符。)
回到§8.3:
可以使用多个声明器在单个 FieldDeclaration 中声明多个域; FieldModifier 和 UnannType 适用于声明中的所有声明符。
所以换句话说,给出:
@Nullable public Integer x, y, z;
我们知道字段修饰符@Nullable public
适用于x
,y
和z
的全部。
另外,读更多的§8.3和§9.74将会澄清,即使将@Nullable
声明为类型注释(即@Target(ElementType.TYPE_USE)
)也是如此:>
注释可能会出现在程序的语法位置上,在该位置可能合理地将其应用于声明,类型或两者。这可以在以下五个声明上下文中的任何一个中发生,其中修饰符紧邻声明的实体的类型:
[…]
字段声明(包括枚举常量)
[…]
Java编程语言的语法明确地将这些位置处的注释视为声明的修饰符(§8.3),[…]。
换句话说,在这样一个位置的注释总是被句法地视作字段修饰符,即使它们不被视为声明注释(因为它没有用@Target(ElementType.FIELD)
进行声明)。字段声明的语法中也暗示了这一点,其中类型以UnannType
的形式给出,即未注释的类型。
答案 1 :(得分:6)
是的,它们都有注释。
注释是pkghtmldir
类型的修饰符,而不是Integer
的修饰符。因此,所有x
,x
,y
的类型均为z