Как я могу поместить массив Java внутри себя?
Я пытаюсь создать массив объектов Java и поместить массив внутри себя со своим вторым индексом (чтобы представить автомодельный фрактал с массивом), но когда я пытаюсь получить доступ к theArray[1][1][0]
, я получаю эта ошибка:
Main.java:11: error: array required, but Object found
.
Это то, что я пробовал до сих пор, и я не уверен, почему он не работает:
import java.util.*;
import java.lang.*;
class Main
{
public static void main (String[] 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
}
}
Возможно ли разместить массив Java внутри себя, как я пытаюсь сделать здесь?
Ответы
Ответ 1
theArray[1]
имеет тип времени компиляции Object
(поскольку он исходит из массива Объекты).
Вам нужно передать его в Object[]
, чтобы использовать его как массив.
Основная проблема, с которой вы сталкиваетесь, состоит в том, что хотя массив, который содержит сам, является вполне допустимым объектом, он не является допустимым типом.
Вы можете вложить типы массивов произвольно глубоко; ndash; Object[][][][][][][][][][][][][]
- допустимый тип.
Однако "нижний уровень" этого типа не может быть массивом.
Вы пытаетесь создать тип, который является массивом самого себя.
Используя generics, это было бы возможно:
class Evil extends ArrayList<Evil> { }
Ответ 2
Вы используете ошибку кастинга, так как объявили theArray
как массив объектов. В результате вы не можете обещать Java, что theArray[1]
является Array
- это может быть любой тип Object
. Вам нужно разбить свой доступ, чтобы сделать то, что вы хотите:
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]);
}
Ответ 3
Ваш код эквивалентен
Object arr = theArray[1]; // arr is an Object here, not an array
Но вы могли бы сделать
Object[] arr = (Object[] ) theArray[1]; // Now it is an array