什么时候数组类型的组件类型也是数组类型?

qybjjes1  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(505)

jls第10节的介绍说:
数组的组件类型本身可以是数组类型。这种数组的组件可能包含对子数组的引用。如果从任何数组类型开始,考虑其组件类型,然后(如果也是数组类型)考虑该类型的组件类型,依此类推,那么最终必须到达一个不是数组类型的组件类型;这称为原始数组的元素类型,数据结构这一级别的组件称为原始数组的元素。
实际上我想不出有什么可能。我不明白为什么一个数组中引用子数组的组成部分会被当作一个假设出现。有人举过这种现象的例子吗?

tv6aics1

tv6aics11#

正是这样,java才知道多维数组。考虑类型

int[][][]

其组件类型为 int[][] . 以及 int[][]int[] . 的组件类型 int[]int . 这里我们得到了一个非数组类型,这意味着 int 是的元素类型 int[][][] .
你可能想知道为什么“元素类型”的定义是必要的。在规范中使用“元素类型”比较方便的地方是:

15.8.2类文字

类文本是一个表达式,由类、接口、数组或基元类型或伪类型void的名称组成,后跟“.”和标记类。
...
如果命名类型是类型变量,则为编译时错误(§4.4)或参数化类型(§4.5)或元素类型为类型变量或参数化类型的数组。
说“其组件类型是类型变量或参数化类型的数组”是没有意义的,因为这只包括 T[] 以及 List<Integer>[] ,但不是 T[][][][] 或者 List<Integer>[][][][] .

相关问题