批注是否适用于声明语句中的所有变量?
2022-09-04 19:49:09
如果使用字段注释在单个语句中声明多个字段,则注释是否适用于所有字段?
例如,以下结果是否会导致 、 和 所有都具有注释?x
y
z
@Nullable
@Nullable public Integer x, y, z;
我正在寻找这方面的官方规范,但很难找到一个。
如果使用字段注释在单个语句中声明多个字段,则注释是否适用于所有字段?
例如,以下结果是否会导致 、 和 所有都具有注释?x
y
z
@Nullable
@Nullable public Integer x, y, z;
我正在寻找这方面的官方规范,但很难找到一个。
我认为我们能得到的最接近的是这个,从§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:
通过使用多个声明器,可以在单个字段声明中声明多个字段;FieldModifiers 和 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
是的,它们都有注释。
注释是 类型的修饰符,而不是 .所以所有的 、 都是类型Integer
x
x
y
z
@Nullable Integer