2

次のシグネチャを持つメソッドがあります。

public static String concatAndSeperate(Object seperator, Object... obj)

このメソッドの目的は、obj 内のオブジェクトを、obj のエントリ間に区切り文字で連結することです。

これで、重大な副作用のために変更できない int 配列ができました。

int[] numbers = new int[] {1, 2, 3, 4, 5, 6, 7};

これらの数値を SQL IN ステートメントに使用したい:

SELECT * FROM quux WHERE id IN (1, 2, 3, 4, 5, 6, 7);

だから私は私のすてきな小さな方法でそれを連結しようとします:

concatAndSeperate(", ", numbers);

もちろん、これは機能しません。数値は整数配列であり、整数配列ではないためです。だから私はそれから整数配列を作ろうとします:

concatAndSeperate(", ", Arrays.asList(numbers).toArray(new Integer[numbers.length]);

これにより、理解できないエラーが発生します。

Exception in thread "main" java.lang.ArrayStoreException
at java.lang.System.arraycopy(Native Method)
at java.util.Arrays.copyOf(Unknown Source)
at java.util.Arrays$ArrayList.toArray(Unknown Source)
at mystuff.MyClass.main(MyClass.java:415)
4

3 に答える 3

0

ArrayStoreExceptionは、無効な型を配列に入れようとしていることを示しています。

Arrays.asList(T... a)が引数からリストを作成する問題。

問題は、ジェネリックがプリミティブ型で機能しないことです。

int の配列を渡すと、ジェネリック vararray は型を int 配列として認識し、出力に単一の項目を作成しますList<int[]>

それを「修正」するには、プリミティブ配列をオブジェクトに変更するだけです

Integer[] numbers = new Integer[] {1, 2, 3, 4, 5, 6, 7};

于 2013-07-08T08:50:34.407 に答える