【问题标题】:Two-dimensional non-null array of nullable elements可空元素的二维非空数组
【发布时间】:2017-07-12 11:53:44
【问题描述】:

在 Java 8 中,我应该在哪里放置 @Nullable/@NonNull 类型注释以声明 可为空 元素的二维非null 数组?

在声明类型时(如在方法签名中),两者都

@Nullable Object @NonNull[][]

@Nullable Object @NonNull[]@NonNull[]

在语法上是有效的。

同样,在定义一个值(零长度数组)时,我可以使用任一

new @Nullable Object @NonNull[0][]

new @Nullable Object @NonNull[0]@NonNull[]

哪个版本是正确的?

【问题讨论】:

  • 在不清楚的时候查一下或者蛮力测试一下
  • 参见this article 中的“应用类型注释”或参见this article

标签: java java-8 annotations nullable type-annotation


【解决方案1】:

读取数组类型时,从括号开始向前读取,然后最后读取元素类型。例如,Object[][] 发音为“对象数组的数组”。 这有助于您理解第一对括号表示最外面的数组,而下一对括号表示作为最外面数组元素的所有数组。

你在对应的类型之前放了一个类型注解。

这是来自type annotations specification 的示例:

@Readonly Document [][] docs1 = new @Readonly Document [2][12]; // array of arrays of read-only documents
Document @Readonly [][] docs2 = new Document @Readonly [2][12]; // read-only array of arrays of documents
Document[] @Readonly [] docs3 = new Document[2] @Readonly [12]; // array of read-only arrays of documents

因此,我们可以理解您的示例:

  • @Nullable Object @NonNull[][] 表示“(未指定)可空元素数组的非空数组”
  • @Nullable Object @NonNull[]@NonNull[] 表示“可空元素的非空数组的非空数组”

您更喜欢哪一种取决于您的规格。仅“二维非null 可为空的 元素数组”并不能提供足够的信息来了解您指的是哪一个,但很可能是第二个。

(这个问题也在 Type annotations FAQ.)

【讨论】:

    猜你喜欢
    • 2019-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    相关资源
    最近更新 更多