【问题标题】:Where does a @Nullable annotation refer to in case of a varargs parameter?如果是 varargs 参数,@Nullable 注释指的是哪里?
【发布时间】:2015-09-01 08:39:25
【问题描述】:

对于以下签名:

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

@Nullable 注解指的是哪里?到数组还是到它的元素?是否有可能同时注释两个选项(数组/元素)?

Java 7 和 Java 8(类型注解)有区别吗?

【问题讨论】:

  • Java 8 中添加了类型注释作为 JSR 308 的一部分。

标签: java-8 type-annotation


【解决方案1】:

由于仍然没有标准的@Nullable 注释,您使用的是第 3 方库的注释,因此这取决于它的声明方式。 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。当然,您可以将它们组合起来声明 both,元素或数组本身都可以是null

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-08-11
  • 2014-10-29
  • 2014-03-23
  • 2012-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多