3

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

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

@Nullable Object @NonNull[][]

@Nullable Object @NonNull[]@NonNull[]

在语法上是有效的。

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

new @Nullable Object @NonNull[0][]

或者

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

哪个版本是正确的?

4

1 回答 1

5

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

您在相应类型之前放置一个类型注释。

这是类型注释规范中的一个示例:

@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数组”并没有提供足够的信息来知道您指的是哪一个,但它可能是第二个。

(这个问题也在 类型注释常见问题解答中得到解答。)

于 2017-07-12T15:52:59.150 回答