0

入力配列 tableParameter の値に従って、実行時に配列を作成する必要があります。

私のコードの例は次のとおりです。

int[] tableParameter = new int[dimension + 1];
tableParameter[0] = N;
for(int i = 1; i < tableParameter.length; i++)
    tableParameter[i] = i;
Object myArray = Array.newInstance(int.class, tableParameter);
//set the index 1 of the array with the value 100
Array.setInt(myArray, 1, 100);

上記のコードの最後の行で例外が発生します。

Exception in thread "main" java.lang.IllegalArgumentException: Argument is not an array

しかし、私が使用したとき、

System.out.println(myArray.getClass().getCanonicalName());

myArray のクラスを確認するために、int[][][][] を出力します。これは、myArray が間違いなく配列型であることを意味します。

では、JVM が myArray が配列ではないという例外をスローするのはなぜでしょうか?

4

1 に答える 1

4

誤解を招く例外かもしれませんが、文句を言うのは間違いなく正しいです。配列が の場合、int[][][][]インデックス 1 の要素を値 100 に設定しても意味がありません。たとえば、次のコードはコンパイルされません。

int[][][][] array = new int[1][1][1][1];
array[0] = 100; // Nope...

int実際の である場合にのみ、要素を に設定できますint[]。したがって、dimensionが 0 (1 次元配列になることを意味します) で、Nが 2 以上の場合、コードは正常に動作します。作成部分から反射を取り除くには:

import java.lang.reflect.Array;

class Test {
    public static void main(String[] args) throws Exception {
        int[] array1 = new int[10];
        Array.setInt(array1, 1, 100); // Works fine

        int[][] array2 = new int[10][10];
        Array.setInt(array2, 1, 100); // Throws IllegalArgumentException
    }
}
于 2013-07-14T20:56:01.633 に答える