在Java 8中,我应该在哪里放置@Nullable
/ @NonNull
类型注释,以声明 nullable 的二维非null
数组元素?
声明类型(如方法签名)时,两者
@Nullable Object @NonNull[][]
和
@Nullable Object @NonNull[]@NonNull[]
在语法上是有效的。
同样,在定义值(零长度数组)时,我可以使用
new @Nullable Object @NonNull[0][]
或
new @Nullable Object @NonNull[0]@NonNull[]
哪个版本正确?
答案 0 :(得分:5)
当您读取数组类型时,从括号开始并向前读取,然后读取最后的元素类型。例如,Object[][]
发音为“Object of array of array”。
这有助于您理解第一对括号表示最外面的数组,下一对括号表示所有数组都是最外层数组的元素。
您可以在相应类型之前放置类型注释。
以下是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数组的非空数组”您喜欢哪一个取决于您的规格。只是“二维非null
可以为空的元素数组”没有提供足够的信息来知道你指的是哪一个,但它可能是第二个。
(这个问题也回答了 Type annotations FAQ。)