L'introduction de l'article 10 du JLS dit:

Le type de composant d'un tableau peut lui-même être un type de tableau. Les composants d'un tel tableau peuvent contenir des références à des sous-tableaux. Si, à partir de n'importe quel type de tableau, on considère son type de composant, puis (si c'est aussi un type de tableau) le type de composant de ce type, et ainsi de suite, on doit finalement atteindre un type de composant qui n'est pas un type de tableau ; c'est ce qu'on appelle le type d'élément du tableau d'origine, et les composants à ce niveau de la structure de données sont appelés les éléments du tableau d'origine.

Je ne peux pas dans la pratique penser à aucune façon cela est possible. Je ne comprends pas pourquoi les composants d'un tableau qui font référence à un sous-tableau sont évoqués comme hypothétiques. Quelqu'un a-t-il un exemple de ce phénomène ?

0
Matthew S. 19 nov. 2020 à 06:52

1 réponse

Meilleure réponse

C'est de cette manière que Java connaît les tableaux multidimensionnels. Considérez le genre

int[][][]

Son type de composant est int[][]. Et le type de composant de int[][] est int[]. Le type de composant de int[] est int. Ici, nous avons atteint un type non tableau, ce qui signifie que int est le type d'élément de int[][][].

Vous vous demandez peut-être pourquoi la définition de "type d'élément" est nécessaire. Eh bien, un endroit où l'utilisation de "type d'élément" est pratique dans la spécification est :

15.8.2 Littéraux de classe

Un littéral de classe est une expression composée du nom d'une classe, d'une interface, d'un tableau ou d'un type primitif, ou du pseudo-type void, suivi d'un '.' et la classe de jeton.

...

Il s'agit d'une erreur de compilation si le type nommé est une variable de type (§4.4) ou un type paramétré (§4.5) ou un tableau dont le type d'élément est une variable de type ou un type paramétré.

Cela n'a pas de sens de dire "tableau dont le type de composant est une variable de type ou un type paramétré" car cela n'inclurait que T[] et List<Integer>[], mais pas T[][][][] ou List<Integer>[][][][].

2
Sweeper 21 nov. 2020 à 01:18