可空元素的二维非null数组

Bas*_*ass 3 java annotations nullable java-8 type-annotation

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

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

@Nullable Object @NonNull[][]
Run Code Online (Sandbox Code Playgroud)

@Nullable Object @NonNull[]@NonNull[]
Run Code Online (Sandbox Code Playgroud)

在语法上是有效的.

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

new @Nullable Object @NonNull[0][]
Run Code Online (Sandbox Code Playgroud)

要么

new @Nullable Object @NonNull[0]@NonNull[]
Run Code Online (Sandbox Code Playgroud)

哪个版本是正确的?

mer*_*nst 5

当您读取数组类型时,从括号开始并向前读取,然后读取最后的元素类型.例如,Object[][]发音为"Object of array of array".这有助于您理解第一对括号表示最外面的数组,下一对括号表示作为最外层数组元素的所有数组.

您在相应类型之前放置了类型注释.

以下是类型注释规范的示例:

@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
Run Code Online (Sandbox Code Playgroud)

因此,我们可以理解你的例子:

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

您喜欢哪一个取决于您的规格.只是"二维非可空元素null数组"没有提供足够的信息来知道你指的是哪一个,但它可能是第二个.

(类型注释常见问题解答中也回答了这个 问题.)