如何将Java数组放入内部?

2022-09-04 01:35:41

我试图创建一个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[]


您遇到的根本问题是,尽管包含自身的数组是一个完全有效的对象,但它不是一个有效的类型

您可以任意深度嵌套数组类型 – 是一个有效的类型。
但是,该类型的“底层”不能是数组。Object[][][][][][][][][][][][][]

您正在尝试创建一个本身是数组的类型。
使用泛型,这是可能的:

class Evil extends ArrayList<Evil> { }

答案 2

您遇到了转换错误,因为您已声明为对象数组。因此,你不能承诺Java是一个 - 它可以是任何一种.您需要拆分访问权限才能执行所需的操作:theArraytheArray[1]ArrayObject

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]);
}