Java 8 对于varargs参数,@Nullable注释指的是哪里?

Java 8 对于varargs参数,@Nullable注释指的是哪里?,java-8,type-annotation,Java 8,Type Annotation,签名如下: public static String format(final String pattern, final @Nullable Object... arguments) @Nullable注释指的是哪里?到数组还是到它的元素?是否可以对这两个选项(数组/元素)进行注释 Java 7和Java 8(类型注释)之间有什么区别吗?由于仍然没有标准的@Nullable注释,您使用的是第三方库的注释,因此它取决于如何声明。Java 8之前的注释不是类型注释,因为旧版本中不存在该功能。因此

签名如下:

public static String format(final String pattern, final @Nullable Object... arguments)
@Nullable注释指的是哪里?到数组还是到它的元素?是否可以对这两个选项(数组/元素)进行注释


Java 7和Java 8(类型注释)之间有什么区别吗?

由于仍然没有标准的
@Nullable
注释,您使用的是第三方库的注释,因此它取决于如何声明。Java 8之前的注释不是类型注释,因为旧版本中不存在该功能。因此,使用这些注释,您总是在注释参数而不是其类型。这通常被框架解释为“参数可以是
null
”,这将是数组引用,尽管框架可能会特别对待varargs,但没有标准规定特定的行为

当您使用真正的Java 8类型批注,即带有
@Target(ElementType.type\u USE)
的批注时,最好使用普通数组声明来解释结果:

@Nullable ElementType  []
声明
@Nullable ElementType
的数组,读取可为null的元素

ElementType  @Nullable []
声明一个可为空的数组类型

因此,宣言

public static String format(final String pattern, final @Nullable Object... arguments)
表示元素可以是
null

public static String format(final String pattern, final Object @Nullable... arguments)
声明数组引用可以是
null
。当然,您可以将它们组合起来声明元素或数组本身都可以是
null

public static String format(String pattern, @Nullable Object @Nullable ... arguments)

如上所述,要使用这些选项,您需要一个真正声明为Java8类型注释的注释类型。然后,为了实施所描述的语义,您需要一个与Java 8类型注释兼容的最新检查器框架实现。

类型注释作为JSR 308的一部分添加到Java 8中。这里还记录了差异(通过数组语法):