如果是 varargs 参数,@Nullable 注释指的是哪里?
Where does a @Nullable annotation refer to in case of a varargs parameter?
对于以下签名:
public static String format(final String pattern, final @Nullable Object... arguments)
@Nullable注解指的是哪里?到数组还是它的元素?是否可以对这两个选项进行注释 (array/elements)?
Java 7 和 Java 8(类型注释)之间有区别吗?
由于仍然没有标准的 @Nullable
注释,您使用的是第三方库的注释,因此这取决于它的声明方式。 Java 8 之前的注释不是类型注释,因为旧版本中不存在该功能。因此,使用这些注解,您总是在注解 参数 而不是它的类型。这通常被框架解释为“参数可以是 null
”,这将是数组引用,尽管框架可能会特殊对待可变参数,但没有强制特定行为的标准。
当您使用真正的 Java 8 类型注释时,即带有 @Target(ElementType.TYPE_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
。当然,你可以将它们组合起来声明 both,元素或数组本身,可以是 null
public static String format(String pattern, @Nullable Object @Nullable ... arguments)
如前所述,要使用这些选项,您需要一个真正声明为 Java 8 类型注释的注释类型。然后,要执行所描述的语义,您需要一个与 Java 8 类型注释兼容的最新检查器框架实现。
对于以下签名:
public static String format(final String pattern, final @Nullable Object... arguments)
@Nullable注解指的是哪里?到数组还是它的元素?是否可以对这两个选项进行注释 (array/elements)?
Java 7 和 Java 8(类型注释)之间有区别吗?
由于仍然没有标准的 @Nullable
注释,您使用的是第三方库的注释,因此这取决于它的声明方式。 Java 8 之前的注释不是类型注释,因为旧版本中不存在该功能。因此,使用这些注解,您总是在注解 参数 而不是它的类型。这通常被框架解释为“参数可以是 null
”,这将是数组引用,尽管框架可能会特殊对待可变参数,但没有强制特定行为的标准。
当您使用真正的 Java 8 类型注释时,即带有 @Target(ElementType.TYPE_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
。当然,你可以将它们组合起来声明 both,元素或数组本身,可以是 null
public static String format(String pattern, @Nullable Object @Nullable ... arguments)
如前所述,要使用这些选项,您需要一个真正声明为 Java 8 类型注释的注释类型。然后,要执行所描述的语义,您需要一个与 Java 8 类型注释兼容的最新检查器框架实现。