Comment puis-je mettre un tableau Java à l’intérieur de lui-même?

J’essaie de créer un tableau d’objects Java et de placer le tableau à l’intérieur de lui-même à son deuxième index (afin de représenter une fractale auto-similaire avec le tableau), mais lorsque j’essaie d’accéder à theArray[1][1][0] , Je reçois cette erreur:

Main.java:11: error: array required, but Object found .

C’est ce que j’ai essayé jusqu’à présent et je ne sais pas pourquoi cela ne fonctionne pas:

 import java.util.*; import java.lang.*; class Main { public static void main (Ssortingng[] args) throws java.lang.Exception { Object[] theArray = new Object[2]; theArray[0] = "This array should contain itself at its second index."; theArray[1] = theArray; //Now I'm attempting to put the array into itself. System.out.println(theArray[1][1][0]) //Main.java:11: error: array required, but Object found } } 

Est-il réellement possible de placer un tableau Java à l’intérieur de lui-même, comme je tente de le faire ici?

theArray[1] est de type compilation (puisqu’il provient d’un tableau d’ objects ).

Vous devez le convertir en Object[] pour l’utiliser comme un tableau.


Le problème fondamental que vous rencontrez est le suivant: même si un tableau qui se contient est un object parfaitement valide, il n’est pas un type valide.

Vous pouvez imbriquer des types de tableaux de manière arbitraire et en profondeur – Object[][][][][][][][][][][][][] est un type valide.
Cependant, le “niveau inférieur” du type ne peut pas être un tableau.

Vous essayez de créer un type qui est un tableau de luimême .
En utilisant des génériques, cela serait possible:

 class Evil extends ArrayList { } 

Vous rencontrez une erreur de casting depuis que vous avez déclaré que theArray est un tableau d’objects. En conséquence, vous ne pouvez pas promettre à Java que theArray[1] est un Array peut s’agir de n’importe quel type d’ Object . Vous aurez besoin de casser votre access pour faire ce que vous voulez:

 Object[] innerArray = (Object[]) theArray[1]; System.out.println(innerArray[0] == theArray[0]); // Always true since innerArray IS theArray while (true) { // Careful! This loops forever! // set innerArray = innerArray[1] = theArray = theArray[1] = innerArray... // all of these are the exact same object (but you have to tell Java their type every time) innerArray = (Object[]) innerArray[1]; System.out.println(innerArray[0]); } 

Votre code est équivalent à

 Object arr = theArray[1]; // arr is an Object here, not an array 

Mais tu pourrais faire

 Object[] arr = (Object[] ) theArray[1]; // Now it is an array