二维非空的可为空元素数组

3
在Java 8中,我应该在哪里放置@Nullable/@NonNull类型注释,以声明一个二维非null的数组,其中包含可为nullable元素?当声明类型(例如在方法签名中)时,两者都需要。
@Nullable Object @NonNull[][]

并且。
@Nullable Object @NonNull[]@NonNull[]

语法上是有效的。

同样地,在定义值(一个长度为零的数组)时,我可以使用以下任何一种方式:

new @Nullable Object @NonNull[0][]

或者

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

哪个版本是正确的?


当不清楚时,要么查找它,要么进行暴力测试。 - kleopi
1
请参阅此文章中的“应用类型注释”或参见此文章 - Holger
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[] 的意思是“非空的非空元素数组的数组可空元素”
这取决于您的规范,您喜欢其中哪一个。仅仅说“二维的、非空的、可为空的元素数组”并不足以了解您所引用的是哪一个,但很可能是第二个。
(本问题还在类型注释FAQ中得到回答。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接