14

Java オブジェクト配列を作成し、その配列をその内部の 2 番目のインデックスに配置しようとしています (配列で自己相似フラクタルを表すため) が、アクセスしようとすると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配列をそれ自体の中に入れることは可能ですか?

4

4 に答える 4

19

theArray[1]コンパイル時の型です( ObjectsObjectの配列に由来するため)。

Object[]配列として使用するには、キャストする必要があります。


発生している根本的な問題は、それ自体を含む配列は完全に有効なオブジェクトですが、有効なではないということです。

配列型は任意の深さまでネストできます –Object[][][][][][][][][][][][][]は有効な型です。
ただし、型の「最下位レベル」を配列にすることはできません。

それ自体の配列である型を作成しようとしています。
ジェネリックを使用すると、次のことが可能になります。

class Evil extends ArrayList<Evil> { }
于 2013-05-21T20:41:36.250 に答える
2

theArrayオブジェクトの配列であると宣言したため、キャスト エラーが発生しています。その結果、Java がtheArray[1]--itArrayであると約束することはできません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]);
}
于 2013-05-21T20:43:09.937 に答える
1

あなたのコードはと同等です

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

しかし、あなたはできる

Object[] arr = (Object[] ) theArray[1];    // Now it is an array
于 2013-05-21T21:16:31.300 に答える