对于以下签名:
public static String format(final String pattern, final @Nullable Object... arguments)
@Nullable 注解指的是哪里?到数组还是到它的元素?是否有可能注释两个选项(数组/元素)?
Java 7 和 Java 8(类型注释)之间有区别吗?
对于以下签名:
public static String format(final String pattern, final @Nullable Object... arguments)
@Nullable 注解指的是哪里?到数组还是到它的元素?是否有可能注释两个选项(数组/元素)?
Java 7 和 Java 8(类型注释)之间有区别吗?
由于仍然没有标准@Nullable
注释,因此您使用的是 3rd 方库的注释,因此它取决于它的声明方式。Java 8 之前的注解不是类型注解,因为该功能在旧版本中不存在。因此,使用这些注释,您总是注释参数而不是其类型。这通常被框架解释为“参数可以是null
”,这将是数组引用,尽管框架可能会特别对待可变参数,但没有标准强制特定行为。
当您使用真正的 Java 8 类型注释时,即带有 的注释@Target(ElementType.TYPE_USE)
,使用普通数组声明可以最好地解释结果:
@Nullable ElementType []
声明一个可读取的可空元素数组@Nullable ElementType
,而
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)
如前所述,要使用这些选项,您需要一个真正声明为 Java 8 类型注释的注释类型。然后,为了执行所描述的语义,您需要一个与 Java 8 类型注释兼容的最新检查器框架实现。